consideri il seguente codice:C#: Perché questo riferimento enum ambiguo non è stato risolto utilizzando la firma del metodo?
namespace ConsoleApplication
{
using NamespaceOne;
using NamespaceTwo;
class Program
{
static void Main(string[] args)
{
// Compilation error. MyEnum is an ambiguous reference
MethodNamespace.MethodClass.Frobble(MyEnum.foo);
}
}
}
namespace MethodNamespace
{
public static class MethodClass
{
public static void Frobble(NamespaceOne.MyEnum val)
{
System.Console.WriteLine("Frobbled a " + val.ToString());
}
}
}
namespace NamespaceOne
{
public enum MyEnum
{
foo, bar, bat, baz
}
}
namespace NamespaceTwo
{
public enum MyEnum
{
foo, bar, bat, baz
}
}
Il compilatore segnala che MyEnum è un riferimento ambiguo nella chiamata a Frobble(). Poiché non vi è alcuna ambiguità in quale metodo viene chiamato, ci si potrebbe aspettare che il compilatore risolva il riferimento al tipo basato sulla firma del metodo. Perché no?
Si prega di notare che non sto dicendo che il compilatore dovrebbe fare questo. Sono fiducioso che ci sia una buona ragione che non sia così. Vorrei semplicemente sapere qual è questa ragione.
Probabilmente vuole che il client sia sicuro che stia usando l'enum giusto dal giusto spazio dei nomi. – BoltClock
hai inserito tutto questo codice nello stesso file? o hai un file per ogni spazio dei nomi? –
@Juan Ayala: non importa; Sono sicuro che il compilatore è in disaccordo con l'uso di '' s' nello spazio dei nomi 'ConsoleApplication'. – BoltClock