我有一个字符串列表。所有字符串都有空格,需要将其转换为下划线。我完全有能力使用for
或foreach
循环来执行此操作。我对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(' ', '_');
});