所以這已經在S.O.上討論過了。然而之前我並不認爲我真的曾經看到過爲什麼會發生這種情況的解釋,也不能看出這對於普通開發人員試圖在其代碼中使用反射有什麼用處。關於c#泛型類型的維度信息有什麼好處
所以檢查這一點的代碼。
var fields = typeof(Person).GetFields(BindingFlags.DeclaredOnly | BindingFlags.NonPublic | BindingFlags.Instance);
如果我在Person
對象有List<int>
話,我會回來的場是誰的反思「名稱」設置爲List`1
,或者如果我有一本字典它會Dictionary`2
。表面上看來這使得它很難一起工作,我不能說這個出現以下
foreach (var fieldInfo in fields.Where(fieldInfo => fieldInfo.FieldType == typeof(List<int>)))
{
//Do something.
}
的原因是因爲我發現在一個項目我目前正在致力於以下。
//Initialize collections
FieldInfo[] properties = type.GetFields(BindingFlags.DeclaredOnly | BindingFlags.NonPublic | BindingFlags.Instance);
foreach (FieldInfo f in properties)
{
if (f.FieldType.Name == "IList`1" && f.GetValue(obj) == null)
{
object value = Container.Resolve(f.FieldType);
f.SetValue(obj, value);
}
}
然後在統一配置我看到這種幸福
<alias alias="IList`1" type="System.Collections.Generic.IList`1, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
我真的不知道,我知道這是不好的?是嗎?它當然是有效的,但即使這是好的(這會導致我的可疑代碼dar熄滅),我的原始問題依然存在。關於泛型的維度信息對程序員有什麼好處呢?
當你說「我不能說以下」。 ,你是什麼意思?這個循環如預期的那樣工作,沒有? – AakashM
我不明白你的問題是什麼,你是問爲什麼,例如,'Tuple <>','Tuple <,>','Tuple <,,>'編碼(這是因爲它們是不同的類型,需要消歧) –
我一直認爲編譯器生成的名稱可能會改變,IE,他們可能在未來的版本中有我t生成'IList-LOL \'1',並且突然你的代碼全部被破壞。 – Jasper