2009-09-21 32 views
11

paramsキーワードは実際に拡張メソッドでサポートされていませんか?C#でparamsと拡張メソッドを使用

paramsキーワードで拡張メソッドを作成すると、「Xに2つの引数を渡すためのオーバーロードされていないメソッド」が表示されることがわかりました。 Intellisenseは拡張メソッドを認識し、オブジェクト配列が必要であることを知っています。

ここではいくつかのサンプルコードです:

public static DalRow EasyRetrieveSingle(this DalRow dalRow, object[] parameters) 
{ 
    Dictionary<string, object> dic = new Dictionary<string, object>(); 
    for (int i = 0; i < parameters.Length; i += 2) 
     dic.Add(parameters[i].ToString(), parameters[i + 1]); 

    List<DalRow> list = DalRow.RetrieveByFieldValues(dalRow.Structure, null, dic).Cast<DalRow>().ToList(); 
    if (list.Count == 0) return null; 
    return list[0]; 
} 

ここで(無駄に)それを呼び出すいくつかのサンプルコードがあります

(new X()).EasyRetrieveSingle(1, 2); 
+4

作品。あなたのコードスニペットに 'params'がありませんか? –

+0

うわー!これはひどい頭が冷たくなければならない。質問に対する私の謝罪。 – Daniel

+0

心配はいりません。あなたが感じるように恥ずかしいように、タイトルを変更しないでください、それは他の人々が同じ問題をグーグルに役立つのに役立ちます – johnc

答えて

23

あなたはparamsキーワードが欠落しているように見えます...

public static DalRow EasyRetrieveSingle(this DalRow dalRow, params object[] parameters) 
8

あなたのメソッドにparamsキーワードがありません。 。

public static DalRow EasyRetrieveSingle(
    this DalRow dalRow, params object[] parameters) 
          ↑ 

これは、コンパイルし、完璧に動作します:私のために

static class Extensions 
{ 
    public static void Test(this Program program, params object[] args) { } 
} 

class Program 
{ 
    static void Main() 
    { 
     new Program().Test(1, 5); 
    } 
} 
関連する問題