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