public enum EnumTest
{
EnumEntry
}
public class TestClass
{
public string FunctionMember(string s, EnumTest t = EnumTest.EnumEntry)
{
return "Normal";
}
public string FunctionMember<T>(T t)
{
return "Generic";
}
}
class Program
{
static void Main(string[] args)
{
TestClass t = new TestClass();
Console.WriteLine(t.FunctionMember("a"));
}
}
Stampa "Generico". La rimozione di , EnumTest t = EnumTest.EnumEntry
lo fa stampare "Normale".Perché un membro di una funzione generica viene scelto su uno non generico?
Eppure la norma sembra essere abbastanza chiaro, da membro 14.4.2.2 migliore funzione il primo discriminatore da applicare è:
- Se uno di MP e MQ non è generica, ma la l'altro è generico, quindi il non generico è migliore.
Mi manca qualcosa o bug del compilatore?
Stai guardando le specifiche C# 4.0? Sospetto che tu stia guardando una specifica più vecchia, che non menziona i parametri opzionali, poiché quelli sono stati introdotti solo in C# 4.0. – CodesInChaos
Credo che tu abbia diverse firme sui tuoi metodi. Hai provato, ad esempio, a passare un int o qualcosa? –
@Codes: non lo ero ma la specifica 4.0 dice la stessa cosa, tranne che è al 7.5.3.2. –