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