1

我想用 2 个参数在 c# 中定义一个函数,它们有它们的默认值,比如

    public T AccessEntity(string Id = null, string File = null)
    {
        return (from e in ServiceContext.CreateQuery<T>(TableName)
                where e.RowKey == Id || e.File == File
                select e).FirstOrDefault();
    }

现在使用这个函数,用户可以按文件或 id 搜索他们的记录,但是如果用户尝试按文件搜索记录,那么我们如何将第一个参数映射到第二个形式参数而不传递任何虚拟值作为第一个参数。

我不想要这个 : invokingobj.AccessEntity(null, "name of file");

这可能吗 ?

4

6 回答 6

5

您可以使用命名参数

invokingobj.AccessEntity(File: "name of file")

请注意,您应该将参数重命名为file,以符合正常的 .NET 命名约定(“在参数名称中使用驼峰大小写”)。

顺便说一句,几乎每个人(包括 MSDN)都对这里的两个默认值的名称感到困惑。它们是可选参数(它是用默认值修饰的参数)但命名参数(参数总是有名称 - 它是允许在 C# 4 中指定名称的参数)。

于 2012-07-23T16:16:12.103 回答
3

您可以使用命名参数参数调用该方法:

invokingobj.AccessEntity(File: "name of file");

有关使用命名参数和可选参数的更多信息,请参见:

命名和可选参数(C# 编程指南)

于 2012-07-23T16:16:04.227 回答
1

我不想要这个 :invokingobj.AccessEntity(null, "name of file");

你不必 - 你可以这样做:

invokingobj.AccessEntity(File:"name of file");

您可以使用命名参数功能定义调用函数时要设置的参数

于 2012-07-23T16:16:12.917 回答
1

使用命名参数

invokingObj.AccessEntity(file: "name of file");
于 2012-07-23T16:17:17.673 回答
0

是的,试试这个:

 invokingobj.AccessEntity(File: "name of file");

这种语言特性称为“命名参数”,是众所周知的“可选参数”的扩展。

于 2012-07-23T16:17:02.317 回答
0

一种选择是创建几种不同的方法。(如果参数有不同的类型,你可以有不同的重载,但因为它们都是string你不能。)

public T AccessEntityById(string Id)
{
    return AccessEntity(Id, null);
}

public T AccessEntityByFile(string file)
{
    return AccessEntity(null, file);
}
于 2012-07-23T16:18:00.453 回答