0

私は列挙型を持っています

  namespace ConsoleTestApplication
  {
    public enum Cars
    {
        Audi,
        BMW,
        Ford
    }
  }

今、列挙型メンバーの完全修飾名を取得したい

結果は

ConsoleTestApplication.Cars.Audi

何かのようなもの

Cars.Audi.GetType().FullName;

また

Cars.Audi.GetType().AssemblyQualifiedName;

私が探しているものはありますが、実際に私が必要としているものはありません。

異なる名前空間に2つの同一の列挙型があり(悪い設計で私を責めないでください。これが私のプロジェクトではどうあるべきか)、プログラムの一部でメンバーを使用する必要があるためです。この列挙型ですが、同じ列挙型があるため、異なる名前空間の同じ列挙型の間のあいまいさについて文句を言うでしょう。したがって、それを回避するために、完全修飾名を提供する必要があります。これは、自動生成されたファイルの一種であるため、手動で実行できない理由です。コンパイル時にプログラムで指定する必要があります。

4

2 に答える 2

2

文字列だけが必要ですか?その場合は、次のような拡張メソッドを使用できます。

public static string GetFullyQualifiedEnumName<T>(this T @this) where T : struct, IConvertible
{
    if (!typeof(T).IsEnum) 
    {
        throw new ArgumentException("T must be an enum");
    }
    var type = typeof(T);
    return string.Format("{0}.{1}.{2}", type.Namespace, type.Name, Enum.GetName(type, @this));      
}

あいまいな列挙型を参照しようとしているだけの場合はMyNameSpace.MyEnum.MyValue、 を使用するだけで、 から明確になりMyOtherNameSpace.MyEnum.MyValueます。

于 2013-06-04T15:43:54.263 に答える
0

連結された結果でそれを偽造することができます:

class Program
{
    static void Main(string[] args)
    {
        Cars car = Cars.Audi;

        Console.WriteLine("{0}.{1}", car.GetType().FullName, Enum.GetName(typeof(Cars), car));
    }
}

enum Cars { Audi, BMW, Ford }
于 2013-06-04T15:38:20.783 に答える