Czy możliwe jest łączenie kodów skrótu dla członków prywatnych w celu wygenerowania nowego kodu skrótu?

Mam obiekt, dla którego chcę wygenerować unikalny skrót (nadpisuj GetHashCode ()), ale chcę uniknąć przepełnienia lub czegoś nieprzewidywalnego.

Kod powinien być wynikiem połączenia kodów skrótu małej kolekcji łańcuchów.

Kody skrótu będą częścią generowania klucza pamięci podręcznej, więc idealnie powinny być unikalne, jednak liczba możliwych wartości, które są mieszane, jest mała, więc myślę, że prawdopodobieństwo jest tutaj na moją korzyść.

Czy coś takiego byłoby wystarczające I czy istnieje lepszy sposób na to?

int hash = 0;
foreach(string item in collection){
    hash += (item.GetHashCode() / collection.Count)
}
return hash;

EDIT: Dziękuję za dotychczasowe odpowiedzi. @Jon Skeet: Nie, kolejność nie jest ważna

Sądzę, że jest to prawie inne pytanie, ale ponieważ używam wyniku do wygenerowania klucza pamięci podręcznej (łańcucha), czy sensowne byłoby użycie funkcji skrótu kryptograficznego takiej jak MD5 lub po prostu użycie reprezentacji ciągu tego int?

questionAnswers(4)

yourAnswerToTheQuestion