[英]Casting a list of an unknown type to a generic list type
我正在處理大量FieldInfo信息,並且想為某些類型的數據添加異常以進行不同的處理(以生成整潔的輸出字符串),但是我找不到將對象轉換為List的方法,因此我可以從中得到計數。
我的代碼:
string str = "";
string value = "";
foreach (FieldInfo fieldInfo in fieldInfos)
{
if (fieldInfo.Name == "Sprite" || fieldInfo.Name == "Background")
{
value = "Unreadable";
}
else if (fieldInfo.GetValue(type) == null)
{
value = "Null";
}
else
{
switch (fieldInfo.GetValue(type).GetType().Name)
{
default:
value = fieldInfo.GetValue(type).ToString();
break;
case "Color":
value = ((Color)fieldInfo.GetValue(type)).Name;
break;
case "List`1":
value = (((System.Collections.Generic.List<>)fieldInfo.GetValue(type)).Count - 1).ToString();
break;
}
}
str += " " + fieldInfo.Name + ": " + value + Environment.NewLine;
}
return str;
而是將其強制轉換為非通用ICollection
:
(((System.Collections.ICollection)fieldInfo.GetValue(type)).Count - 1).ToString();
它將使您可以訪問Count
屬性。
如果您只是在數量之后,那么只需使用List<>
也實現的非通用IList
:
case "List`1":
value = (((System.Collections.IList)fieldInfo.GetValue(type)).Count - 1).ToString();
break;
您可以通過將default
子句更改為此來支持任何容器,從而增加一些靈活性:
default:
if (typeof(System.Collections.ICollection).IsAssignableFrom(fieldInfo.GetValue(type).GetType())
value = (((System.Collections.ICollection)fieldInfo.GetValue(type)).Count - 1).ToString();
else
value = fieldInfo.GetValue(type).ToString();
break;
現在,您將處理Dictionary<>
和LinkedList<>
以及List<>
這樣的集合
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.