Ответ 1
Если ваши записи перечисления находятся в верблюжьем футляре, вы можете вставить пробел перед верхней буквой
string res = Regex.Replace("UnitedStates", "[A-Z]", " $0").Trim();
Пробовал создать перечисление, которое имеет пробелы в атрибутах, но было очень сложно, поэтому они могли бы быть простым способом взломать это со строковым форматом или чем-то, потому что их только одно перечисление, в котором я нуждаюсь, имеет пробелы, и я точно знаю что это. Любая помощь в добавлении пробела в эту строку
public class Address
{
...blah...more class datatypes here...
public AddressType Type { get; set; } //AddressType is an enum
...blah....
}
if (Address.Type.ToString() == "UnitedStates")
{
**Add space between United and States**
}
Если ваши записи перечисления находятся в верблюжьем футляре, вы можете вставить пробел перед верхней буквой
string res = Regex.Replace("UnitedStates", "[A-Z]", " $0").Trim();
Вы можете создать свой собственный метод ToString
в перечислении с использованием метода расширения.
public static class AddressTypeExtensions
{
public static string ToMyString(this AddressType addressType)
{
if (addressType == AddressType.UnitedStates)
return "United States";
return addressType.ToString();
}
}
Это аккуратный трюк, который я нашел вчера (в 2009 году). Интересно, почему я никогда не думал об этом сам. В рамках .net нет способа контролировать .ToString() для перечислений. Чтобы обойти это, можно создать метод расширения, а также атрибут для украшения различных значений перечисления. Тогда мы можем написать что-то вроде этого:
public enum TestEnum
{
[EnumString("Value One")]
Value1,
[EnumString("Value Two")]
Value2,
[EnumString("Value Three")]
Value3
}
EnumTest test = EnumTest.Value1;
Console.Write(test.ToStringEx());
The code to accomplish this is pretty simple:
[AttributeUsage(AttributeTargets.Field)]
public class EnumStringAttribute : Attribute
{
private string enumString;
public EnumStringAttribute(string EnumString)
{
enumString = EnumString;
}
public override string ToString()
{
return enumString;
}
}
public static class ExtensionMethods
{
public static string ToStringEx(this Enum enumeration)
{
Type type = enumeration.GetType();
FieldInfo field = type.GetField(enumeration.ToString());
var enumString =
(from attribute in field.GetCustomAttributes(true)
where attribute is EnumStringAttribute
select attribute).FirstOrDefault();
if (enumString != null)
return enumString.ToString();
// otherwise...
return enumeration.ToString();
}
}
[TestMethod()]
public void ToStringTest()
{
Assert.AreEqual("Value One", TestEnum.Value1.ToStringEx());
Assert.AreEqual("Value Two", TestEnum.Value2.ToStringEx());
Assert.AreEqual("Value Three", TestEnum.Value3.ToStringEx());
}
Кредит идет на этот пост.
У меня есть удобный метод расширения для именно этого
public static class EnumExtensions
{
public static string ToNonPascalString(this Enum enu)
{
return Regex.Replace(enu.ToString(), "([A-Z])", " $1").Trim();
}
public T EnumFromString<T>(string value) where T : struct
{
string noSpace = value.Replace(" ", "");
if (Enum.GetNames(typeof(T)).Any(x => x.ToString().Equals(noSpace)))
{
return (T)Enum.Parse(typeof(T), noSpace);
}
return default(T);
}
}
Пример:
public enum Test
{
UnitedStates,
NewZealand
}
// from enum to string
string result = Test.UnitedStates.ToNonPascalString(); // United States
// from string to enum
Test myEnum = EnumExtensions.EnumFromString<Test>("New Zealand"); // NewZealand
Следующий код преобразует AbcDefGhi
в Abc Def Ghi
.
public static string ConvertEnum(this string value)
{
string result = string.Empty;
char[] letters = value.ToCharArray();
foreach (char c in letters)
if (c.ToString() != c.ToString().ToLower())
result += " " + c;
else
result += c.ToString();
return result;
}