I have a generic class which takes two type parameters, Generic<A, B>. This class has methods with signatures that are distinct so long and A and B are distinct. However, if A == B the signatures match exactly and overload resolution cannot be performed. Is it possible to somehow specify a specialisation of the method for this case? Or force the compiler to arbitrarily choose one of the matching overloads?
using System; namespace Test { class Generic<A, B> { public string Method(A a, B b) { return a.ToString() + b.ToString(); } public string Method(B b, A a) { return b.ToString() + a.ToString(); } } class Program { static void Main(string[] args) { Generic<int, double> t1 = new Generic<int, double>(); Console.WriteLine(t1.Method(1.23, 1)); Generic<int, int> t2 = new Generic<int, int>(); // Following line gives: // The call is ambiguous between the following methods // or properties: 'Test.Generic<A,B>.Method(A, B)' and // 'Test.Generic<A,B>.Method(B, A)' Console.WriteLine(t2.Method(1, 2)); } } }
Thanks for the good answers, they prompted me into this solution: