C#List <T> .ConvertAll in .NET 2.0

kzh*_*kzh 8 c# delegates list

我有一个字符串列表.所有字符串都有空格,需要转换为下划线.我完全有能力使用forforeach循环来做到这一点.我对C#还是比较新的,并希望对它更加熟悉.话虽如此,我的问题是:

如何在.NET 2.0中使用以下代码?当我fieldListConvertAll操作结束时检查时,没有任何改变.是否存在按值而不是引用传递字符串的问题?

string fields =
  "First Name,Middle Name,Last Name,Birth Date,Gender,Address,City,State,Zip,Email";
List<string> fieldList = new List<string>(fields.Split(','));
fieldList.ConvertAll<string>(new Converter<string, string>(
    delegate(string str)
    {
        str = str.Trim();
        str = str.Replace(' ', '_');
        return str;
    }
));
Run Code Online (Sandbox Code Playgroud)

请记住,我使用的是.NET 2.0,目前无法切换,所以我没有使用LINQ或Lambdas的奢侈.

And*_*are 13

您需要将ConvertAll方法的结果分配给变量,如下所示:

fieldList = fieldList.ConvertAll<string>(new Converter<string, string>(
    delegate(string str)
    {
        str = str.Trim();
        str = str.Replace(' ', '_');
        return str;
    }
));
Run Code Online (Sandbox Code Playgroud)

ConvertAll方法返回一个新方法,List<T>因此您需要分配方法的结果.如果您想重新使用fieldList变量,可能最好创建一个新变量以提高代码的清晰度:

List<String> convertedFieldList 
    = fieldList.ConvertAll<string>(new Converter<string, string>(
        delegate(string str)
        {
            str = str.Trim();
            str = str.Replace(' ', '_');
            return str;
        }
));
Run Code Online (Sandbox Code Playgroud)

正如Marc Gravell在下面的评论中指出的那样,您可以通过这样做简化此表达式的语法:

List<String> convertedFieldList 
    = fieldList.ConvertAll<String>(delegate(String str) {
            return str.Trim().Replace(' ', '_');
        });
Run Code Online (Sandbox Code Playgroud)

  • 为了完整起见,你可以简化为`... ConvertAll <string>(delegate(string str){...});` (7认同)