2009-09-21 37 views
11

扩展方法中是否真的不支持params关键字?使用参数和扩展方法的C#

我发现当我用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'? – 2009-09-21 23:06:14

+0

哇!这必须是惊人的头冷。我对这个问题表示歉意。 – Daniel 2009-09-21 23:14:48

+0

不用担心。请不要改变标题,因为你觉得很尴尬,它会帮助其他人搜索同样的问题 – johnc 2009-09-21 23:30:15

回答

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); 
    } 
}