schreiben Während ich einige Unittests schreibe, kam ich accros eine (für mich das ist) seltsame Sache.Wörterbuch <TKey,TValue>: genaue Art von TValue hängt davon ab, was Sie in
Ich habe eine Dictionary<string, IEnumerable<string>>
.
Der Test Assert.IsType<Dictionary<string, IEnumerable<string>>>(result)
besteht.
Jedoch Assert.IsType<IEnumerable<string>>(result["myKey"])
schlägt fehl. Es sollte stattdessen System.String[]
sein.
Ich schrieb eine schnelle Konsole App zur Verifizierung und das überraschte mich sogar mehr. Der Typ des Werts war unterschiedlich, wenn ich einen string[]
oder List<string>
hinzufügte.
var dic = new Dictionary<string, IEnumerable<string>>();
dic.Add("myArrayKey", new[] { "Value1", "Value2" });
dic.Add("myListKey", new List<string> { "Value1", "Value2" });
Console.Write("Type of dic should be Dictionary<string, IEnumerable<string>> : ");
Console.WriteLine(dic.GetType());
Console.Write("Type of dic[myListKey] should be IEnumerable<string> : ");
Console.WriteLine(dic["myArrayKey"].GetType());
Console.Write("Type of dic[myArrayKey] should be IEnumerable<string> : ");
Console.WriteLine(dic["myListKey"].GetType());
in Resultierte:
Type of dic should be Dictionary<string, IEnumerable<string>> : System.Collections.Generic.Dictionary`2[System.String,System.Collections.Generic.IEnumerable`1[System.String]]
Type of dic[myArrayKey] should be IEnumerable<string> : System.String[]
Type of dic[myListKey] should be IEnumerable<string> : System.Collections.Generic.List`1[System.String]
Ich weiß, dass beide string[]
und List<string>
IEnumerable<string>
sind, aber das Ergebnis ist etwas, was ich überhaupt nicht erwartet hatte. Kann jemand etwas Einblick in dieses Verhalten geben?
Auf einer Nebenbemerkung: Ich habe meinen Test von Assert.IsType<>
zu Assert.IsAssignableFrom<>
geändert, um dies zu vermeiden.
Wenn Sie ein 'IEnumerable' haben und Sie 'Katze' und' Hund' Typen hineinlegen, würden Sie nicht wollen, dass sie Arten ändern, wenn sie herauskamen, oder um zu vergessen, welche Spezies sie waren. –