-2

换句话说:这可能吗?

public void ShowMessage(string cultureKeyText, string cultureKeyTitle = null, params string[] fields)

使用逗号分隔列表调用它时。它如何知道第二个参数实际上是第二个参数还是第三个参数的逗号分隔列表中的第一个?

编辑:重载真的能解决它吗:

 public void ShowError(string cultureKeyText, string cultureKeyCaption);
 public void ShowError(string cultureKeyText, params string[] fields);
 public void ShowError(string cultureKeyText, string cultureKeyCaption, params string[] fields) 

如果我现在调用 ShowError("First", "Some");

它如何知道 Some 是调用第一种方法还是第二种方法?

4

3 回答 3

1

它如何知道第二个参数实际上是第二个参数还是第三个参数的逗号分隔列表中的第一个

如果你这样调用你的方法

 ShowMessage("1","2", "3", "4", "5" );

那么 2 将被视为cultureKeyTitle。但是如果你想跳过可选参数,那么你将不得不这样做

指定parameter name您要分配的,现在cultureKeyTitle将被分配默认值

ShowMessage("", fields: new[] { "", "", "" }); //call
于 2013-08-22T15:14:49.457 回答
1

是的,您提供的方法将正确编译和运行。这是有效的代码。

如果你用ShowMessage("1", "2", "3");then 调用它,它将解释2cultureKeyTitle参数,而不是params字段的第一个参数。

就像任何其他可选参数一样,必须先为所有先前的可选参数指定一个值,然后才能为给定参数提供值(当不使用命名参数时)。

如果您指定“2”和“3”是该params字段的两个参数并且cultureKeyTitle将使用它的可选参数,而不是使用“正常”调用会发生什么,则需要使用命名参数,如下所示:

ShowMessage("1", fields: new[] { "2", "3" });
于 2013-08-22T15:28:24.387 回答
0

在语法上它是有效的。

您可以这样调用:

ShowMessage(cultureKeyText: "cvbncbn", fields: new[] { "ff", "gh" });
于 2013-08-22T15:27:59.293 回答