簡體   English   中英

將未知類型的列表轉換為通用列表類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM