How to resolve ambiguity when argument is null?

后端 未结 7 1572
轮回少年
轮回少年 2021-01-03 19:36

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 co

相关标签:
7条回答
  • 2021-01-03 20:19

    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
    }
    
    0 讨论(0)
  • 2021-01-03 20:22
    Func((Class1)null);
    
    0 讨论(0)
  • 2021-01-03 20:23

    You could also use a variable:

    Class1 x = null;
    Func(x);
    
    0 讨论(0)
  • 2021-01-03 20:23

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

    0 讨论(0)
  • 2021-01-03 20:25

    Cast null to the type:

    Func((Class1)null);
    
    0 讨论(0)
  • 2021-01-03 20:28

    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;
    }
    
    0 讨论(0)
提交回复
热议问题