Соответствующее решение в вашем случае было бы просто использовать регулярные перечисления:
enum Version
{
Version1,
Version2,
}
Если вы хотите, чтобы получить строковое значение конкретного перечисления, вы можете просто использовать ToString
:
string s = Version.Version1.ToString();//this will result in the string "Version1"
Что касается того, почему вы видите ошибку, у вас есть , в вашем коде не экземпляр Version
. Переменная имеет тип String
. Тот факт, что он определен в классе Version
, не делает его экземпляром Version
. Вам нужно будет создать new Version
и вернуть его для компиляции.
Хотя вы можете создать свой собственный тип перечисления на основе строк, просто не нужно. Вы можете просто использовать ToString
, как я сказал ранее. Если вы хотите сделать это в любом случае, хотя код может выглядеть примерно так:
public struct Version
{
private string value;
private Version(string value)
{
this.value = value;
}
public static readonly Version Version1 = new Version("Version1");
public static readonly Version Version2 = new Version("Version2");
public override string ToString()
{
return value;
}
}
Вы можете взять его дальше, чтобы добавить функциональные возможности для анализа, сравнения, равенство и т.д. все они основаны на базовом значении строки.
Основная причина использования этого настраиваемого типа «перечисления строк» была бы, если важно, чтобы строковое значение перечисления отличалось от имени переменной, используемого для его представления. Это особенно важно, если строковое значение не является юридическим идентификатором в C# (т. Е. Что-то, что содержит пробелы в нем) или, возможно, только потому, что оно очень длинное, а идентификатор должен быть более коротким.
«строка на основе перечисления, созданного в качестве структуры» ?! – wRAR
у вас в структуре нет поля и, хотя бессмысленно возвращать его – Lanorkin
"string based enum created as a struct" ?! –