C# Список.ConvertAll in.NET 2.0
у меня есть список строк. Все строки имеют пробелы, которые необходимо преобразовать в подчеркивания. Я полностью способен использовать 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.
2 ответов
вам нужно назначить результаты 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;
}
));
как Марк Gravell отмечает в комментарии ниже, вы можете упростить синтаксис этого выражения, делая это:
List<String> convertedFieldList
= fieldList.ConvertAll<String>(delegate(String str) {
return str.Trim().Replace(' ', '_');
});
ConvertAll
не менять список. Он возвращает новый список, содержащий преобразованный материал. Кстати, вы можете удалить new Converter<string,string>
С C# 2.0+:
List<string> converted = fieldList.ConvertAll<string>
(delegate(string s) { return s.Trim().Replace(' ', '_'); });
кроме того, ничто не мешает вам использовать компилятор C# 3.0 и LINQBridge и целевой .NET 2.0.