C#使用params和扩展方法

Dan*_*iel 12 c# extension-methods

扩展方法中是否真的不支持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];
}
Run Code Online (Sandbox Code Playgroud)

这是一些调用它的示例代码(无济于事)

(new X()).EasyRetrieveSingle(1, 2);
Run Code Online (Sandbox Code Playgroud)

Yul*_*liy 26

看起来你错过了params关键字......

public static DalRow EasyRetrieveSingle(this DalRow dalRow, params object[] parameters) 
Run Code Online (Sandbox Code Playgroud)


dtb*_*dtb 8

您params在方法声明中缺少关键字.

public static DalRow EasyRetrieveSingle(
    this DalRow dalRow, params object[] parameters)
                          ?
Run Code Online (Sandbox Code Playgroud)

这编译并运行完美:

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

class Program
{
    static void Main()
    {
        new Program().Test(1, 5);
    }
}
Run Code Online (Sandbox Code Playgroud)