考虑这样的方法

void RegisterUser(string firstname, string lastname, int age);

我喜欢在调用此类方法时明确命名此类的参数,因为对于某些人来说,很容易混淆firstnamelastname参数。但是,age并不是真正必要的。例如,从清晰的角度来看,我认为这应该可以。
RegisterUser(firstname: "John", lastname: "Smith", 25);

但是会引发以下错误:



另一个有趣的事情是,如果签名是
void RegisterUser(int age, string firstname, string lastname);

然后按如下方式调用它不会引发错误
RegisterUser(25, firstname: "John", lastname: "Smith");

为什么C#是这样设计的?如果允许第一种情况,那么编译器会有麻烦吗?

最佳答案

编译器也许能够弄清楚这一点,但对于我们人类来说,几乎不可能知道25是指第一个参数还是第三个参数。特别是因为它打开了混合参数的可能性。为什么不

MyFunction(firstname: "josh", 25, "smith", someotherargument: 42)

您将如何解释,年龄为25岁,姓氏为史密斯?为它制定规则,编译器可以实现它。但是,这对人类有意义。代码混淆不应该那么容易

语言应该使出错更容易,而不是更容易

注意:如果以后命名的参数较早,则奇怪的是排序会开始发生。 (例如,在我的示例中为firstname和smith),因为这将使您的未命名参数映射到正确的参数成为一个难题。可以做到的,但是代码不应该引起困惑

10-07 19:47
查看更多