我有一个具有一些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");
}
答案 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;