2
This question让我想到了如何编写一个需要包含类型参数变量列表的方法。在泛型类型定义中使用'params'的方法
一个方法是接受params Type[]
作为参数,如部分:
public static bool IsOneOf(this object obj, params Type[] types)
{
return types.Contains(obj.GetType());
}
然而,使用有点冗长(例如obj.IsOneOf(typeof(int), typeof(bool), typeof(double))
)和我想知道关于替代方法定义一个方法采取任意数量的通用参数。一些类似于:
public static bool IsOneOf<params TArgs[]>(this object obj)
{
// use TArgs here
}
一种解决方法是使用了4.0 BCL的元组类(它定义了一个通用的接口ITuple
以及Tuple<T1>
,Tuple<T1, T2>
等)来定义类似如下:
public static bool IsOneOf<TTypes>(this object obj) where TTypes : ITuple
{
Type tupleType = typeof(TTypes);
return tupleType.GetGenericArguments().Contains(obj.GetType());
}
然后,它可以像这样使用:
if (obj.IsOneOf<Tuple<int, bool, decimal>>()) { ... }
是否有性能方面的考虑在这里,或者是@这里有一个替代方法来实现这个语法?
在.net框架中是否没有东西检查列表中是否存在项目?你这样做的目的是什么,除了对象的扩展吗? – shahkalpesh 2009-07-28 16:23:34