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))
)であると私は1つの方法を定義する代替アプローチについて疑問に思って任意の量の一般的な議論をとる。何か似へ:
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
はい、List.Containsがあります。問題は、メソッドの総称引数の定義で 'params 'を使うことができないということです。元の目的はオブジェクトの拡張ですが、他の場所でも適用できます。 – Jason