Splitting CamelCase

前端 未结 15 2430
盖世英雄少女心
盖世英雄少女心 2020-12-07 10:56

This is all asp.net c#.

I have an enum

public enum ControlSelectionType 
{
    NotApplicable = 1,
    SingleSelectRadioButtons = 2,
    SingleSelectD         


        
相关标签:
15条回答
  • 2020-12-07 11:42

    You can use C# extension methods

            public static string SpacesFromCamel(this string value)
            {
                if (value.Length > 0)
                {
                    var result = new List<char>();
                    char[] array = value.ToCharArray();
                    foreach (var item in array)
                    {
                        if (char.IsUpper(item) && result.Count > 0)
                        {
                            result.Add(' ');
                        }
                        result.Add(item);
                    }
    
                    return new string(result.ToArray());
                }
                return value;
            }
    

    Then you can use it like

    var result = "TestString".SpacesFromCamel();
    

    Result will be

    Test String

    0 讨论(0)
  • 2020-12-07 11:51
    public enum ControlSelectionType    
    {   
        NotApplicable = 1,   
        SingleSelectRadioButtons = 2,   
        SingleSelectDropDownList = 3,   
        MultiSelectCheckBox = 4,   
        MultiSelectListBox = 5   
    } 
    public class NameValue
    {
        public string Name { get; set; }
        public object Value { get; set; }
    }    
    public static List<NameValue> EnumToList<T>(bool camelcase)
            {
                var array = (T[])(Enum.GetValues(typeof(T)).Cast<T>()); 
                var array2 = Enum.GetNames(typeof(T)).ToArray<string>(); 
                List<NameValue> lst = null;
                for (int i = 0; i < array.Length; i++)
                {
                    if (lst == null)
                        lst = new List<NameValue>();
                    string name = "";
                    if (camelcase)
                    {
                        name = array2[i].CamelCaseFriendly();
                    }
                    else
                        name = array2[i];
                    T value = array[i];
                    lst.Add(new NameValue { Name = name, Value = value });
                }
                return lst;
            }
            public static string CamelCaseFriendly(this string pascalCaseString)
            {
                Regex r = new Regex("(?<=[a-z])(?<x>[A-Z])|(?<=.)(?<x>[A-Z])(?=[a-z])");
                return r.Replace(pascalCaseString, " ${x}");
            }
    
    //In  your form 
    protected void Button1_Click1(object sender, EventArgs e)
            {
                DropDownList1.DataSource = GeneralClass.EnumToList<ControlSelectionType  >(true); ;
                DropDownList1.DataTextField = "Name";
                DropDownList1.DataValueField = "Value";
    
                DropDownList1.DataBind();
            }
    
    0 讨论(0)
  • 2020-12-07 11:51

    Simple version similar to some of the above, but with logic to not auto-insert the separator (which is by default, a space, but can be any char) if there's already one at the current position.

    Uses a StringBuilder rather than 'mutating' strings.

    public static string SeparateCamelCase(this string value, char separator = ' ') {
    
        var sb = new StringBuilder();
        var lastChar = separator;
    
        foreach (var currentChar in value) {
    
            if (char.IsUpper(currentChar) && lastChar != separator)
                sb.Append(separator);
    
            sb.Append(currentChar);
    
            lastChar = currentChar;
        }
    
        return sb.ToString();
    }
    

    Example:

    Input  : 'ThisIsATest'
    Output : 'This Is A Test'
    
    Input  : 'This IsATest'
    Output : 'This Is A Test' (Note: Still only one space between 'This' and 'Is')
    
    Input  : 'ThisIsATest' (with separator '_')
    Output : 'This_Is_A_Test'
    
    0 讨论(0)
提交回复
热议问题