我如何制作一个可以存储数据类型(比如字符串、日期时间、十进制等)的集合?并使用此集合执行比较,如下所示:
if (pi.PropertyType.IsIn ([how can check against the collection of type) //where pi is a property info]))
{
}
有什么建议么?
我如何制作一个可以存储数据类型(比如字符串、日期时间、十进制等)的集合?并使用此集合执行比较,如下所示:
if (pi.PropertyType.IsIn ([how can check against the collection of type) //where pi is a property info]))
{
}
有什么建议么?
List<Type> types = new List<Type> {typeof(string), typeof(int)};
if (types.Contains(pi.PropertyType))
{
//do stuff
}
希望我能正确理解你的问题。首先需要对集合类型进行更精确的定义。这是我将使用的:
集合是通用的
集合正在实现标准集合接口之一,如IList<T>
,ICollection<T>
或IEnumerable<T>
. 在此示例中,集合类型是派生自 的类型IEnumerable<T>
。
要发现一个类型是否是一个集合,您必须使用它来获取它实现的接口GetInterfaces()
,只查看使用的泛型接口IsGenericType
,然后使用以下方法获取泛型类型(即从IList<String>
to IList<>
)GetGenericTypeDefinition()
:
var genericCollectionType = typeof(IEnumerable<>);
var isCollection = pi
.PropertyType
.GetInterfaces()
.Where(type => type.IsGenericType)
.Select(type => type.GetGenericTypeDefinition())
.Contains(genericCollectionType);
if (isCollection) {
...
}