如何使用反射来获取列表中的项目数

时间:2016-06-21 19:32:15

标签: c# list generics reflection

我有一个具有一些List<T>属性的类。我需要能够动态确定给定列表的大小。

以下是我到目前为止的代码。我怎样才能摆脱switch语句并将其作为一个一般性陈述?我很想转发List<T>,但这不起作用。

switch (Inf.GetType()
            .GetProperty(propertyName)
            .GetValue(Inf)
            .GetType()
            .UnderlyingSystemType.GenericTypeArguments[0]
            .Name)
        {
            case "String":
                dynamicListCount = ((List<string>)Inf.GetType().GetProperty(propertyName).GetValue(Inf)).Count;
                break;
            case "Int32":
                dynamicListCount = ((List<Int32>)Inf.GetType().GetProperty(propertyName).GetValue(Inf)).Count;
                break;
            default:
                throw new Exception("Unknown list type");
        }

2 个答案:

答案 0 :(得分:2)

您应该将其类型转换为IList,因为通用类型List<>会实现接口IList。与评论的建议相同。 (crosspost)

List<string> items = new List<string>();

items.Add("item1");
items.Add("item2");


int count = ((IList)items).Count;

MessageBox.Show(count.ToString());

答案 1 :(得分:2)

List<T>实现IList,其Count属性(继承自ICollection)。

您可以简单地将值转换为IList并获取如下计数:

IList list = (IList) Inf.GetType()
        .GetProperty(propertyName)
        .GetValue(Inf);

var count = list.Count;