我有一个字符串列表。所有字符串都有需要转换为下划线的空格。我完全有能力使用 for
或 foreach
循环来执行此操作。我对 C# 还是比较陌生,想更加熟悉它。话虽如此,我的问题是:
如何让以下代码在 .NET 2.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;
}
));
请记住,我使用的是 .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(' ', '_');
});
关于.NET 2.0 中的 C# List<T>.ConvertAll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1948933/