2012-07-23 122 views
1

我要定义在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");

这可能吗?

回答

5

你可以使用named arguments

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

请注意,您应将重命名为file,但要遵守normal .NET naming conventions(“在参数名称中使用驼峰套管”)。另外,几乎每个人,包括MSDN,都会对这里的两个默认名称感到困惑。它们是可选的参数(它是用默认值装饰的参数),但是名为参数(参数总是有名称 - 它是允许在C#4中指定名称的参数)。

+0

+1,算上我对每个人都感到困惑...... – 2012-07-23 16:21:13

1

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

你没有 - 你可以这样做:

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

可以定义当你要设置的参数通过使用命名参数功能

0

是的,试试这个:

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

这种语言功能被称为“命名参数”,是著名的“可选参数”的延伸。

0

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

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

public T AccessEntityByFile(string file) 
{ 
    return AccessEntity(null, file); 
}