我有一个字符串列表。所有字符串都有空格,需要将其转换为下划线。我完全有能力使用forforeach循环来执行此操作。我对C#还是比较陌生,并且想对它更加熟悉。话虽如此,我的问题是:

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

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

请记住,我正在使用.NET 2.0并且当前无法切换,因此我没有使用LINQ或Lambdas的奢侈享受。

最佳答案

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

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

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

正如Marc Gravell在下面的注释中指出的那样,您可以通过执行以下操作来简化此表达式的语法:
List<String> convertedFieldList
    = fieldList.ConvertAll<String>(delegate(String str) {
            return str.Trim().Replace(' ', '_');
        });

10-08 02:16