3

我如何制作一个可以存储数据类型(比如字符串、日期时间、十进制等)的集合?并使用此集合执行比较,如下所示:

if (pi.PropertyType.IsIn ([how can check against the collection of type) //where pi is a property info]))
{

}

有什么建议么?

4

2 回答 2

3
List<Type> types = new List<Type> {typeof(string), typeof(int)};
if (types.Contains(pi.PropertyType))
{
  //do stuff
}
于 2012-04-23T07:27:00.453 回答
0

希望我能正确理解你的问题。首先需要对集合类型进行更精确的定义。这是我将使用的:

  • 集合是通用的

  • 集合正在实现标准集合接口之一,如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) {
  ...
}
于 2012-04-23T07:58:16.483 回答