我定义了以下方法:
void Write(string fileContent, string fileName, string container = StorageBlobContainers.ProfilePictures)
代码编译没有问题,所以我写了代码来执行它(来自不同的文件):
string json = JsonConvert.SerializeXNode(node);
FileProcessor.Write(json, "productscontainer");
但由于某种原因,它似乎什么也没做。
经过几分钟努力理解问题后,我终于找到了它。在同一个类的某处,已经有一个 Write
函数定义如下:
void Write(string filePath, string container = StorageBlobContainers.ProfilePictures)
{
if (!File.Exists(filePath))
return string.Empty;
...
这真的让我很困惑,因为它编译得很好,当然,这是有道理的,因为一个方法有 3 个参数签名而另一个方法有 2 个,但这不是非常模棱两可和/或容易出错吗?对我来说,似乎没有一种方法是“合乎逻辑的”选择。为什么选择第二个而不是另一个?
最佳答案
是的,方法解析可能很棘手,所以在编写多个重载时始终记住这一点。他们不应该像现在这样对你模棱两可。编译器只是选择了最短的匹配,这是它应该做的,因为它被记录为这样做。
您可以做两件事:
- 重命名其中一种方法。对于您和编译器而言,这将使方法解析变得轻而易举,而且绝对清晰。
- 使两者都需要最后一个参数。这将使方法解析再次变得非常清晰:两个参数与三个参数。
关于c# - 参数 : (required, optional) vs (required, required, optional),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37989181/