.NET 2.0 中的 C# List<T>.ConvertAll

标签 c# list delegates

我有一个字符串列表。所有字符串都有需要转换为下划线的空格。我完全有能力使用 forforeach 循环来执行此操作。我对 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/

相关文章:

c# - 从 GUID 的前四个字节获取 Int32 的最佳方法是什么?

python - 我只想从测试文件中删除一个搜索行

java - 为什么我的ArrayList包含添加到列表中的最后一项的N个副本?

ios - 如何告诉我的 imagePickerController 委托(delegate)我的自定义 UIButton 正在处理拍照

c# - 使用 WPF 或 Unity 进行简单的游戏开发

c# - 仅当双击 DataGridView 中的单元格而不是标题时,如何运行代码?

c# - WPF在代码中绑定(bind)TextBox和DataRow

java - 如何过滤字符串/列表?

ios - Swift4.2 : Why func gameDidEnd(_:) no need to use game parameter but still declare in the function?

c# - 此 lambda 代码有问题,不会在所有情况下都返回值