我有一个字符串列表.所有字符串都有空格,需要转换为下划线.我完全有能力使用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;
}
));
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)