当参数为空时如何解决歧义?

发布于 2024-09-29 04:09:11 字数 272 浏览 6 评论 0原文

编译以下代码将返回 The call is ambigacy Between the followingmethods orproperties 错误。由于我无法显式地将 null 转换为任何这些类,如何解决这个问题?

static void Main(string[] args)
{
    Func(null);
}

void Func(Class1 a)
{

}

void Func(Class2 b)
{

}

Compiling the following code will return The call is ambiguous between the following methods or properties error. How to resolve it since I can't explicitly convert null to any of those classes?

static void Main(string[] args)
{
    Func(null);
}

void Func(Class1 a)
{

}

void Func(Class2 b)
{

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

執念 2024-10-06 04:09:11
Func((Class1)null);
Func((Class1)null);
-柠檬树下少年和吉他 2024-10-06 04:09:11

您还可以使用变量:

Class1 x = null;
Func(x);

You could also use a variable:

Class1 x = null;
Func(x);
请远离我 2024-10-06 04:09:11

null 转换为类型:

Func((Class1)null);

Cast null to the type:

Func((Class1)null);
遗失的美好 2024-10-06 04:09:11

使用 as 进行转换使其在具有相同功能的情况下稍微更具可读性。

Func(null as Class1);

Using as for the casting makes it slightly more readable with the same functionality.

Func(null as Class1);
居里长安 2024-10-06 04:09:11

Func() 方法接受引用类型作为参数,该参数可以为 null。由于您使用显式 null 值调用该方法,因此编译器不知道您的 null 是否应该引用 Class1 对象或 Class2 对象。

您有两个选择:

将 null 转换为 Class1Class2 类型,如 Func((Class1)null)Func((Class2)null)

提供不接受参数的 Func() 方法的新重载,并在没有显式对象引用时调用该重载:

void Func()
{
    // call this when no object is available
}

The Func() methods accept a reference type as a parameter, which can be null. Since you're calling the method with an explicit null value, the compiler doesn't know whether your null is supposed to be in reference to a Class1 object or a Class2 object.

You have two options:

Cast the null to either the Class1 or Class2 type, as in Func((Class1)null) or Func((Class2)null)

Provide a new overload of the Func() method that accepts no parameters, and call that overload when you don't have an explicit object reference:

void Func()
{
    // call this when no object is available
}
缱绻入梦 2024-10-06 04:09:11

您应该能够将 null 转换为其中任何一个,就像变量 Func((Class1)null) 一样。

You should be able to cast null to either of those, the same as you would a variable Func((Class1)null).

归属感 2024-10-06 04:09:11

只是我更喜欢的替代解决方案

static void Main(string[] args)
{
    Func(Class1.NULL);
}

void Func(Class1 a)
{ }

void Func(Class2 b)
{ }

class Class1
{
    public static readonly Class1 NULL = null;
}

class Class2
{
    public static readonly Class2 NULL = null;
}

Just an alternative solution I prefer

static void Main(string[] args)
{
    Func(Class1.NULL);
}

void Func(Class1 a)
{ }

void Func(Class2 b)
{ }

class Class1
{
    public static readonly Class1 NULL = null;
}

class Class2
{
    public static readonly Class2 NULL = null;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文