C# 在此字符串中的单词之间添加空格

C# 在此字符串中的单词之间添加空格,c#,string-formatting,C#,String Formatting,尝试设置一个属性中有空格的枚举,但非常困难,所以我认为他们可能是一个简单的方法,可以用字符串格式或其他方式解决这个问题,因为他们是我需要的唯一一个有空格的枚举,我确切地知道它是什么。在这个字符串中添加空格有什么帮助吗 public class Address { ...blah...more class datatypes here... public AddressType Type { get; set; } //AddressType is an enum ...blah.... }

尝试设置一个属性中有空格的枚举,但非常困难,所以我认为他们可能是一个简单的方法,可以用字符串格式或其他方式解决这个问题,因为他们是我需要的唯一一个有空格的枚举,我确切地知道它是什么。在这个字符串中添加空格有什么帮助吗

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

您可以使用扩展方法在枚举上创建自己的
ToString
方法

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

          return addressType.ToString();
     }
}

如果枚举项是驼峰大小写,则可以在大写字母前插入空格

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

我有一个简便的扩展方法来实现这一点

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

}
公共静态类枚举扩展
{
公共静态字符串ToNonPascalString(此枚举菜单)
{
返回Regex.Replace(enu.ToString(),“([A-Z]),“$1”).Trim();
}
公共T EnumFromString(字符串值),其中T:struct
{
字符串noSpace=value.Replace(“,”);
if(Enum.GetNames(typeof(T)).Any(x=>x.ToString().Equals(noSpace)))
{
返回(T)Enum.Parse(typeof(T),noSpace);
}
返回默认值(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
公共枚举测试
{
美国,,
新西兰
}
//从枚举到字符串
字符串结果=Test.UnitedStates.ToNonPascalString();//美国
//从字符串到枚举
Test myEnum=EnumExtensions.EnumFromString(“新西兰”);//新西兰

这是我昨天(2009年)发现的一个巧妙的把戏。我想知道为什么我自己从来没有想到过。在.net framework中,无法控制枚举的.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());
}

这篇文章的功劳。

以下代码将
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;
}

这对“联合阿拉伯联合酋长国”有效吗啊,是的。它在每个令牌之前放置一个空格,因此Trim.FWIW我将认为该方法与“TopasCalScand”完全相反。LOL,很好的一点,我从来没有真正考虑过,我应该改变这一点,在我的图书馆里已经有很多年了,现在LOL添加到和从方法中添加