¿Es posible combinar códigos hash para que los miembros privados generen un nuevo código hash?

Tengo un objeto para el que quiero generar un hash único (anular GetHashCode ()) pero quiero evitar desbordamientos o algo impredecible.

El código debe ser el resultado de combinar los códigos hash de una pequeña colección de cadenas.

Los códigos hash serán parte de la generación de una clave de caché, por lo que idealmente deberían ser únicos, sin embargo, el número de valores posibles que se están procesando es pequeño, por lo que creo que la probabilidad está a mi favor aquí.

¿Sería algo como esto suficiente Y hay una mejor manera de hacer esto?

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

EDIT: Gracias por las respuestas hasta ahora. @Jon Skeet: No, el orden no es importante

Supongo que esta es otra pregunta, pero ya que estoy usando el resultado para generar una clave de caché (cadena), ¿tendría sentido usar una función de hash criptográfica como MD5 o simplemente usar la representación de cadena de este int?

Respuestas a la pregunta(4)

Su respuesta a la pregunta