Partial enum compiled in runtime - alternative
c#, roslyn
Solution
It seems to me that you don't actually need an `enum` here. You want to add some values to it at runtime, which means `enum` doesn't fit your needs. But you can create a class that does. Something like:
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"); } }
}
If you want to use one of the predefined values, access the static property (e.g. `PartialEnum.Name`). If you want to use a runtime-defined value, use the `GetValue()` method (e.g. `PartialEnum.GetValue("runTimeLastName")`).
Problem
I would like to do something like a `partial enum`. If I know C# has no support for this. My idea is to do `Dictionary<PartialEnum, MyClass>` in `MyClass2`. Dictionary contains some properties loaded from file and I want to have a possibility to add some other "properties" (members of `PartialEnum`). I am using the Roslyn so I can compile some "second" part of enum during runtime but don't know how to do it. (`partial static class` is also not supported so I cannot use `public readonly` members) ``` MyClass{ string value; public string Value{ get{ return value;} } } MyClass2{ private Dictionary<PartialEnum,MyClass> properties; } ``` I can use `string` like key but it is not very nice. So is it possible to do something like: ``` partial enum PartialEnum{ Name, Group, ... } ``` and runtime compiled part ``` partial enum PartialEnum{ runTimeLasName, runTimeTitle, ... } ```