<T>.ConvertAll списка C# в.NET 2.0

У меня есть список строк. Все строки имеют пробел, который должен быть преобразован в символы нижнего подчеркивания. Я полностью способен к использованию a 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 или Лямбд.

8
задан Andrew Hare 22 December 2009 в 20:46
поделиться

2 ответа

Вам нужно присвоить результаты метода ConvertAll переменной типа:

fieldList = fieldList.ConvertAll<string>(new Converter<string, string>(
    delegate(string str)
    {
        str = str.Trim();
        str = str.Replace(' ', '_');
        return str;
    }
));

Метод ConvertAll возвращает новый List, так что вам нужно присвоить результат метода. Если вы хотите повторноиспользовать переменную fieldList можно, но, возможно, лучше создать новую переменную для большей ясности вашего кода:

List<String> convertedFieldList 
    = fieldList.ConvertAll<string>(new Converter<string, string>(
        delegate(string str)
        {
            str = str.Trim();
            str = str.Replace(' ', '_');
            return str;
        }
));

Как указывает Марк Грэвелл в комментарии ниже, вы можете упростить синтаксис этого выражения, сделав так:

List<String> convertedFieldList 
    = fieldList.ConvertAll<String>(delegate(String str) {
            return str.Trim().Replace(' ', '_');
        });
13
ответ дан 5 December 2019 в 10:41
поделиться

ConvertAll не изменяет список входных данных. Он возвращает новый список, содержащий преобразованный материал. Кстати, вы можете удалить новый Converter на C# 2.0+:

List<string> converted = fieldList.ConvertAll<string>
    (delegate(string s) { return s.Trim().Replace(' ', '_'); });

Кроме того, ничто не мешает вам использовать компилятор C# 3.0 и LINQBridge и целевой .NET 2.0.

.
3
ответ дан 5 December 2019 в 10:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: