2013-03-05 18 views
11

Provato a creare un enum che ha spazi negli attributi ma era molto difficile, quindi è possibile che il loro sia un modo semplice per hackerarlo con un formato stringa o qualcosa poiché il loro è solo un enum ho bisogno di spazi e so esattamente di cosa si tratta. Qualsiasi wiht aiutare l'aggiunta di uno spazio a questa stringaAggiungere uno spazio in questa stringa tra le parole

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** 
     } 

risposta

5

è possibile creare il proprio metodo ToString sulla enumerazione utilizzando un metodo di estensione.

public static class AddressTypeExtensions 
{ 
    public static string ToMyString(this AddressType addressType) 
    { 
      if (addressType == AddressType.UnitedStates) 
       return "United States"; 

      return addressType.ToString(); 
    } 
} 
12

Se le voci enum sono in caso di cammello, è possibile inserire uno spazio bianco prima della lettera superiore

string res = Regex.Replace("UnitedStates", "[A-Z]", " $0").Trim(); 
+0

Funzionerà su "UnitedArabEmirates"? :) –

+0

@DanJ sicuro, provalo – VladL

+1

Ah, sì. Mette uno spazio prima di ogni gettone, quindi il Trim. –

1

Ho un metodo di estensione a portata di mano proprio per questo

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); 
    } 

} 

Esempio:

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 
+0

FWIW Considererei questo metodo esattamente l'opposto * di "ToPascalString". :) – Brandon

+0

LOL, buon punto Non ci ho mai pensato, dovrei cambiarlo, sono stato nella mia libreria per anni ora LOL –

+0

Aggiunto ae da metodi –

2

Questo è un trucco pulito che ho trovato ieri (nel 2009). Mi chiedo perché non ho mai pensato a me stesso. Nel framework .net non c'è modo di controllare .ToString() per le enumerazioni. Per ovviare al problema è possibile creare un metodo di estensione e un attributo per decorare i diversi valori dell'enumerazione. Quindi possiamo scrivere qualcosa del genere:

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()); 
} 

Il merito va a questo post.

0

Il seguente codice convertirà AbcDefGhi in 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; 
} 
Problemi correlati