我想在c#中用2个参数定义一个函数,它们有默认值,比如
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");
这可能吗?
答案 0 :(得分:5)
您可以使用named arguments:
invokingobj.AccessEntity(File: "name of file")
请注意,您应将参数重命名为file
,以符合normal .NET naming conventions(“在参数名称中使用驼峰套管”)。
顺便说一下,几乎所有人 - 包括MSDN - 都对这两个默认值的名称感到困惑。它们是可选的参数(它是用默认值修饰的参数)但是命名为 arguments (参数总是有名称 - 它的参数允许指定名称C#4)。
答案 1 :(得分:3)
您可以使用命名的参数参数调用该方法:
invokingobj.AccessEntity(File: "name of file");
有关使用命名参数的更多信息,可以在以下位置找到可选参数:
答案 2 :(得分:1)
我不希望这样:
invokingobj.AccessEntity(null, "name of file");
您没有 - 您可以这样做:
invokingobj.AccessEntity(File:"name of file");
您可以定义使用命名参数功能调用函数时要设置的参数
答案 3 :(得分:1)
invokingObj.AccessEntity(file: "name of file");
答案 4 :(得分:0)
是的,试试这个:
invokingobj.AccessEntity(File: "name of file");
此语言功能称为“命名参数”,是众所周知的“可选参数”的扩展。
答案 5 :(得分:0)
一种选择是创建几种不同的方法。 (如果参数的类型不同,你可能有不同的重载,但由于它们都是string
,你不能。)
public T AccessEntityById(string Id)
{
return AccessEntity(Id, null);
}
public T AccessEntityByFile(string file)
{
return AccessEntity(null, file);
}