从T列表中删除空格和下划线

时间:2016-11-03 17:30:05

标签: c# excel wpf removing-whitespace

问题: 对象的T列表(aTSource)包含一个字段名称列表,其中包含额外的空格和下划线,以防止与不带变量的变量匹配。

我的Model类中有一个T对象列表。此列表包括字段名称,值和字段类型。我想进入字段名称并从名称中删除任何空格和下划线。

代码的目的是比较Excel文档和WPF表单中的字段,并返回这些字段名称的共同列表。

Locale[] availableLocales = Locale.getAvailableLocales();

for(Locale locale : availableLocales){
    Log.d("Locale", locale.getDisplayName());
}

来自aTSource的示例值:

foreach (DataRow dataRow in dataTable.AsEnumerable().ToList())
{
    T aTSource = new T();
    foreach (PropInfo aField in commonFields)
    {
        PropertyInfo propertyInfos = aTSource.GetType().GetProperty(aField.Name);
        var value = (dataRow[afield.Name] == DBNull.Value) ? null : dataRow[afield.Name]; 
        ...     
        propertyInfos.SetValue(aTSource, value, null);
        list.Add(aTSource);
    }
}

2 个答案:

答案 0 :(得分:1)

使用替换语句创建两个Foreach循环,第一个用于Excel字段名称列表,第二个用于WPF形式的字段名称,以确保字段名称都匹配。

foreach (DataColumn column in dataTable.Columns)
{
    column.ColumnName = column.ColumnName.Replace(" ", "");
    column.ColumnName = column.ColumnName.Replace("_", "");
}

答案 1 :(得分:0)

如果你的目标只是比较两个字符串,独立于空格和下划线,你可以创建一个扩展方法来剥离它们然后进行比较:

public static string SuperStrip(this string InputString)
{
    if (string.IsNullOrWhiteSpace(InputString))
        return string.Empty;

    return InputString.Replace(" ", string.Empty).Replace("_", string.Empty);
}

这些表达式中的每一个都会产生true条件:

bool foo;
foo = "nicekitty".SuperStrip() == "nice kitty".SuperStrip();
foo = "nicekitty".SuperStrip() == "nice_kitty".SuperStrip();
foo = "nice_kitty".SuperStrip() == "nice kitty".SuperStrip();

当然,你也可以把它包装在一个函数中来比较它们:

public static bool HeaderCompare(string String1, string String2)
{
    if (string.IsNullOrWhiteSpace(String1))
        String1 = string.Empty;
    if (string.IsNullOrWhiteSpace(String2))
        String2 = string.Empty;

    return String1.Replace(" ", string.Empty).Replace("_", string.Empty) ==
        String2.Replace(" ", string.Empty).Replace("_", string.Empty);
}

这几乎看起来过于简单了,所以我可能会误解你的任务,所以如果我不想让我知道。