Как установить пространство на Enum
Я хочу установить пробел в моем перечислении. Вот мой пример кода:
public enum category
{
goodBoy=1,
BadBoy
}
Я хочу установить
public enum category
{
Good Boy=1,
Bad Boy
}
Когда я возвращаюсь, я хочу увидеть результат Хороший мальчик из перечисления
Ответы
Ответ 1
Вы можете украсить свои значения Enum с помощью DataAnnotations
, поэтому верно следующее:
using System.ComponentModel.DataAnnotations;
public enum Boys
{
[Display(Name="Good Body")]
GoodBoy,
[Display(Name="Bad Boy")]
BadBoy
}
Я не уверен, что UI Framework вы используете для своих элементов управления, но ASP.NET MVC может читать DataAnnotations
при вводе HTML.LabelFor
в представлениях Razor.
Здесь используется метод расширения
Если вы не используете представления Razor или хотите получить имена в коде:
public class EnumExtention
{
public Dictionary<int, string> ToDictionary(Enum myEnum)
{
var myEnumType = myEnum.GetType();
var names = myEnumType.GetFields()
.Where(m => m.GetCustomAttribute<DisplayAttribute>() != null)
.Select(e => e.GetCustomAttribute<DisplayAttribute>().Name);
var values = Enum.GetValues(myEnumType).Cast<int>();
return names.Zip(values, (n, v) => new KeyValuePair<int, string>(v, n))
.ToDictionary(kv => kv.Key, kv => kv.Value);
}
}
Затем используйте его:
Boys.GoodBoy.ToDictionary()
Ответ 2
Вы неправильно понимаете, для чего используется переименование. Перечисление предназначено для программирования, по сути давая имя числу. Это полезно для программиста при чтении исходного кода.
status = StatusLevel.CRITICAL; // this is a lot easier to read...
status = 5; // ...than this
Перечисления не предназначены для показа и не должны отображаться конечному пользователю. Как и любая другая переменная, перечисления не могут использовать пробелы в именах.
Чтобы связать внутренние значения с яркими ярлыками, которые вы можете отобразить для пользователя, можете использовать словарь или хэш.
myDict["Bad Boy"] = "joe blow";
Ответ 3
Подумайте, что это может быть уже рассмотрено, некоторые предложения:
Просто не могу победить stackoverflow;) просто так много здесь сегодня.
Ответ 4
using System.ComponentModel;
то...
public enum category
{
[Description("Good Boy")]
goodboy,
[Description("Bad Boy")]
badboy
}
решаемые!!
Ответ 5
Это невозможно, перечислитель не может содержать пробел в своем имени.
Ответ 6
Почему бы вам не использовать ToString()?
Я имею в виду, что при использовании ToString() он дает значение перечисления. Просто вам нужно добавить некоторый идентификатор, чтобы ловить пробел. Например:
public enum category
{
good_Boy=1,
Bad_Boy
}
Когда вы получаете перечисление в таких кодах, как категория a =..., вы можете использовать метод ToString(). Это дает вам значение как строку. После этого вы можете просто изменить _ на пустую строку.
Ответ 7
Разрабатывая обходное решение user14570 (nice), упомянутое выше, здесь приведен полный пример:
public enum MyEnum
{
My_Word,
Another_One_With_More_Words,
One_More,
We_Are_Done_At_Last
}
internal class Program
{
private static void Main(string[] args)
{
IEnumerable<MyEnum> values = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>();
List<string> valuesWithSpaces = new List<string>(values.Select(v => v.ToString().Replace("_", " ")));
foreach (MyEnum enumElement in values)
Console.WriteLine($"Name: {enumElement}, Value: {(int)enumElement}");
Console.WriteLine();
foreach (string stringRepresentation in valuesWithSpaces)
Console.WriteLine(stringRepresentation);
}
}
Выход:
![введите описание изображения здесь]()
Ответ 8
С# теперь имеет встроенную функцию для получения описания из перечисления. Вот как это работает
Мой Enum:
using System.ComponentModel.DataAnnotations;
public enum Boys
{
[Description("Good Boy")]
GoodBoy = 1,
[Description("Bad Boy")]
BadBoy = 2
}
Это как получить описание в коде
var enumValue = Boys.GoodBoy;
string stringValue = enumValue.ToDescription();
Результат: хороший мальчик.
Ответ 9
Я использовал Regex, чтобы разделить значения по заглавной букве, а затем сразу объединить в строку с пробелом между каждой строкой в возвращаемом массиве.
string.Join(" ", Regex.Split(v.ToString(), @"(?<!^)(?=[A-Z])"));
Сначала получите значения перечисления:
var values = Enum.GetValues(typeof(Category));
Затем переберите значения и используйте приведенный выше код, чтобы получить значения:
var ret = new Dictionary<int, string>();
foreach (Category v in values)
{
ret.Add((int)v, string.Join(" ", Regex.Split(v.ToString(), @"(?<!^)(?=[A-Z])")));
}
В моем случае мне нужен был словарь со значением и отображаемым именем, поэтому у меня есть переменная "ret"
Ответ 10
Основываясь на предложении Smac, я добавил метод расширения для простоты, так как я вижу, что у многих людей все еще есть проблемы с этим.
Я использовал аннотации и вспомогательный метод расширения.
Определение перечисления:
internal enum TravelClass
{
[Description("Economy With Restrictions")]
EconomyWithRestrictions,
[Description("Economy Without Restrictions")]
EconomyWithoutRestrictions
}
Определение класса расширения:
internal static class Extensions
{
public static string ToDescription(this Enum value)
{
FieldInfo field = value.GetType().GetField(value.ToString());
DescriptionAttribute attribute = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;
return attribute == null ? value.ToString() : attribute.Description;
}
}
Пример использования enum:
var enumValue = TravelClass.EconomyWithRestrictions;
string stringValue = enumValue.ToDescription();
Это вернет Economy With Restrictions
.
Надеюсь, что это поможет людям в качестве полного примера. Еще раз, кредит идет на Smac за эту идею, я только что завершил ее с помощью метода расширения.
Ответ 11
У вас не может быть перечисление с пробелами в .Net. Это было возможно с более ранними версиями VB и С++, но не более того. Я помню, что в VB6 я использовал их в квадратных скобках, но не в С#.
Ответ 12
Поскольку исходный вопрос запрашивал добавление пробела в значение enum/name, я бы сказал, что символ подчеркивания должен быть заменен пробелом, а не пустой строкой. Однако наилучшим решением является использование аннотаций.
Ответ 13
Перечислитель не может содержать пробел в своем имени.
Как известно, enum - это ключевое слово, используемое для объявления перечисления.
вы можете проверить эту ссылку
https://msdn.microsoft.com/en-us/library/sbbt4032.aspx
Ответ 14
public enum MyEnum { With_Space, With_Two_Spaces } //I store spaces as underscore. Actual values are 'With Space' and 'With Two Spaces'
public MyEnum[] arrayEnum = (MyEnum[])Enum.GetValues(typeof(MyEnum));
string firstEnumValue = String.Concat(arrayEnum[0].ToString().Replace('_', ' ')) //I get 'With Space' as first value
string SecondEnumValue = String.Concat(arrayEnum[1].ToString().Replace('_', ' ')) //I get 'With Two Spaces' as second value