在运行时编译的部分枚举-可选

本文关键字:枚举 可选 运行时 编译 | 更新日期: 2023-09-27 18:10:13

我想做一些像partial enum。如果我知道c#不支持这个。我的想法是在MyClass2中做Dictionary<PartialEnum, MyClass>。字典包含从文件加载的一些属性,我想有可能添加一些其他"属性"(PartialEnum的成员)。我正在使用Roslyn,所以我可以在运行时编译一些enum的"第二"部分,但不知道如何做到这一点。(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, ...
}

在运行时编译的部分枚举-可选

在我看来,您实际上不需要这里的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"))。