C#列表<;T>;。NET 2.0中的ConvertAll

C#列表<;T>;。NET 2.0中的ConvertAll,c#,list,delegates,C#,List,Delegates,我有一个字符串列表。所有字符串都有需要转换为下划线的空白。我完全能够使用for或foreach循环来完成此操作。我对C#还是比较陌生的,希望对它更加熟悉。话虽如此,我的问题是: 如何使以下代码在.NET2.0中工作?当我在ConvertAll操作结束时检查fieldList时,没有任何更改。通过值而不是引用传递字符串是否存在问题 string fields = "First Name,Middle Name,Last Name,Birth Date,Gender,Address,City,S

我有一个字符串列表。所有字符串都有需要转换为下划线的空白。我完全能够使用
for
foreach
循环来完成此操作。我对C#还是比较陌生的,希望对它更加熟悉。话虽如此,我的问题是:

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

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;
    }
));
字符串字段=
“名字、中间名、姓氏、出生日期、性别、地址、城市、州、邮政编码、电子邮件”;
List fieldList=新列表(fields.Split(',');
fieldList.ConvertAll(新转换器(
委托(字符串str)
{
str=str.Trim();
str=str.Replace('','');
返回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;
    }
));
正如Marc Gravell在下面的评论中指出的,您可以通过以下操作简化此表达式的语法:

List<String> convertedFieldList 
    = fieldList.ConvertAll<String>(delegate(String str) {
            return str.Trim().Replace(' ', '_');
        });
List convertedFieldList
=fieldList.ConvertAll(委托(字符串str){
返回str.Trim().替换('''.'');
});

ConvertAll
不会更改输入列表。它返回一个包含已转换内容的新列表。顺便说一下,您可以使用C#2.0+卸下
新转换器

List converted=fieldList.ConvertAll
(委托(字符串s){返回s.Trim().Replace(''.'.');});

此外,没有什么可以阻止您使用C#3.0编译器和目标.NET 2.0。

为了完整性,您可以简化为
…ConvertAll(委托(字符串str){…})我收到此错误:无法从用法推断方法“System.Collections.Generic.List.ConvertAll(System.Converter)”的类型参数。请尝试显式指定类型参数。抱歉,我已修复错误。我习惯于使用C#编译器的第4版:)我重新添加了新的转换器。fieldList=fieldList.ConvertAll(新转换器(委托(字符串str){return str.Trim().Replace('''.')}));出于某种原因,如果没有新的转换器声明,C#2.0无法推断类型。
List<String> convertedFieldList 
    = fieldList.ConvertAll<String>(delegate(String str) {
            return str.Trim().Replace(' ', '_');
        });
List<string> converted = fieldList.ConvertAll<string>
    (delegate(string s) { return s.Trim().Replace(' ', '_'); });