以下方法或属性之间的调用不明确
本文关键字:调用 不明确 之间 属性 方法 | 更新日期: 2023-09-27 18:20:07
假设我有这两个因素:
public SomeClass(string a, Color? c = null, Font d = null)
{
// ...
}
public SomeClass(string a, Font c = null, Color? d = null)
{
// ...
}
~我这样做:
SomeClass sc = new SomeClass("Lorem ipsum");
我会得到这样的:"错误1以下方法或属性之间的调用不明确[…]"
在我看来,很明显,我所说的最终结果是一样的并不重要(至少在这个特殊的情况下,对我来说,这才是现在最重要的),那么我有什么选择来解决这个问题呢?
编辑1:@oltman:简化的例子。
我只想能够写
[...] new SomeClass("Lorem", Color.Green)
而不是
[...] new SomeClass("Lorem", null, Color.Green)
两个构造函数采用相同数量的参数,但顺序不同。由于您已经为两个构造函数参数指定了默认值,因此当没有提供第二个参数时,编译器无法区分这两个重载。
我建议您删除现有的构造函数,并替换为以下构造函数:
public SomeClass(string a, Color? color, Font font)
{
// constructor implementation
}
public SomeClass(string a) : this(a, null, null) {}
public SomeClass(string a, Color color) : this(a, color, null) {}
public SomeClass(string a, Font font) : this(a, null, font) {}
强制它工作的一种方法:
SomeClass sc = new SomeClass("Lorem ipsum", (Color?)null, (Font)null);
这是anti-pattern
的一个完美例子,避免这种情况的最佳方法是@Phil Klein的答案。
以下是另一种将类传递为null的语法:
SomeClass sc = new SomeClass("Lorem ipsum", null as Color, null as Font);
JetBrains Rider IDE问题
在我最近的案例中,JetBrains Rider在project_name.csproj
中添加了对project_name
的引用,从而产生自引用,并导致不时发生的构建错误:
<ItemGroup>
<Reference Include="[project_name]">
<HintPath>[path_to_dll_file]</HintPath>
</Reference>
</ItemGroup>
解决方案是恢复这一添加。
您是否可以创建另一个只接受字符串的构造函数,并更新上面的构造函数,使其第二个参数成为强制性参数?
如果想法是你可以通过总是提供字符串,然后可选地提供颜色或字体或两者来构建对象,那么这个呢:
public SomeClass(string a)
{
// ...
}
public SomeClass(string a, Color? c)
{
// ...
}
public SomeClass(string a, Font f, Color? d = null)
{
// ...
}
我会得到这个:";错误1以下方法或属性[…]"之间的调用不明确;
对我来说,很明显,我指的是哪一个并不重要,因为最终结果是相同的
调用不明确。每个构造函数都是唯一的——它们是否同时创建和返回一个实例并不重要,因为每个构造函数中可能有不同的逻辑。编译器仍然不知道你指的是哪个构造函数。
我在安装PnP.Framework(SharePointPnPCoreOnline 的替代品)后遇到了这个问题
我能够通过卸载从我的项目文件中安装的SharePointPnPCoreOnline来删除它,并尝试清理和构建,然后错误消失
我希望这能帮助那些将遇到与我的相同问题的读者
有时IDE的扩展程序(如OmniSharp)可能会报告此错误,
即使您的代码编译/是正确的
这就是我的情况。我重新启动它,假阳性错误消失了。