5

のようなことをしたいと思いますpartial enum。C#がこれをサポートしていないことがわかっている場合。私の考えは、で行うことDictionary<PartialEnum, MyClass>ですMyClass2。ディクショナリにはファイルからロードされたいくつかのプロパティが含まれており、他の「プロパティ」(のメンバー)を追加できるようにしたいと考えていますPartialEnumRoslyn を使用しているので、実行時にenumの「2 番目の」部分をコンパイルできますが、その方法がわかりません。(partial static classもサポートされていないため、public readonlyメンバーは使用できません)

MyClass{
  string value;

  public string Value{
     get{ return value;}
  }
}

MyClass2{

  private Dictionary<PartialEnum,MyClass> properties;

}

同様のキーを使用できますstringが、あまり良くありません。それで、次のようなことは可能ですか:

partial enum PartialEnum{
 Name,
 Group, ...
}

および実行時コンパイル部分

partial enum PartialEnum{     
 runTimeLasName,
 runTimeTitle, ...
}
4

1 に答える 1

2

ここは実際には必要ないように思えenumます。実行時にいくつかの値を追加したいのですが、これはenumニーズに合わないことを意味します。しかし、そうするクラスを作成できます。何かのようなもの:

class PartialEnum
{
    private static readonly Dictionary<string, PartialEnum> Values =
        new Dictionary<string, PartialEnum>();

    public string Id { get; private set; }

    private PartialEnum(string id)
    {
        Id = id;
    }

    public static PartialEnum GetValue(string id)
    {
        PartialEnum value;
        if (!Values.TryGetValue(id, out value))
        {
            value = new PartialEnum(id);
        }

        return value;
    }

    public static PartialEnum Name { get { return GetValue("Name"); } }

    public static PartialEnum Group { get { return GetValue("Group"); } }
}

定義済みの値のいずれかを使用する場合は、静的プロパティにアクセスします (例: PartialEnum.Name)。ランタイム定義の値を使用する場合は、GetValue()メソッド (例: PartialEnum.GetValue("runTimeLastName")) を使用します。

于 2013-04-22T12:31:13.513 に答える