2009-07-16 9 views
29

私はいくつかの日付、paramsキーワードを使用して他のパラメータの不明な数を取ると、オブジェクトのリストを返すデリゲートを定義したいと思います。デリゲートでparamsキーワードを使用できますか?

Func<DateTime, DateTime, params int[], List<object>> 

Visual Studioでは、これは許可されていないと思われる構文が嫌いです。なぜ誰かが私に言うことができますか?

答えて

21

をあなたはジェネリック型引数にカスタム属性を持つことはできません(CLIがそれを許可していません) C#コンパイラは、System.ParamArrayAttributeを関連するメソッドパラメータに出力してparamsキーワードを実装します。

これにより、System.Func <...>総称代理人では使用できなくなりますが、いつでもparamsを使用する独自の代理人タイプを作成できます。

42

最後のパラメータ以外のパラメータにはパラメータを使用できません。これは、そのパラメータの不平の一部です。

タイプ引数にparamsも使用できません。これは代表者のためだけではなく、一般的にです。たとえば、あなたが書くことはできません。

List<params string[]> list = new List<params string[]>(); 

あなたは、しかし、このように、新しいデリゲート型を宣言することができます。

メソッドグループの変換が一致する必要があります
delegate void Foo(int x, params string[] y); 

... 

Foo foo = SomeMethod(); 
foo(10, "Hi", "There"); 

に留意されたいです。あなたがSomeMethodを次のように宣言することはできませんでした。例えば、上記のように動作することを期待してください。それはでなければならない:(。それとも、コースのparams自体を、使用することができます)

void SomeMethod(int x, string[] args) 

関連する問題