您可以使用 Linq 来执行此操作。
例如,如果你只想解析为 double 你会这样做:
List<double> result = strings.Select(double.Parse).ToList()
您可以使用任何其他方法而不是 double.Parse 发送:
List<double> result = strings.Select(DoSomethingWithOneItem).ToList()
double DoSomethingWithOneItem(string item) {
//your conversion logic
}
不幸的是,例如 IList<TInput> 和 IList<TOutput> 之间没有任何关系可以用来提供帮助,因此您需要指定输入和输出列表类型,这在一般形式中变得有点麻烦:
IList<string> strings = new List<string> {"1.1", "2.2", "3.3"};
IList<decimal> result = strings.ConvertToSameListType((Func<string, decimal>)decimal.Parse, () => new List<decimal>());
public static class EnumerableExtensioncGeneralVersion
{
public static TOutputList ConvertToSameListType<TInputList, TOutputList, TInput, TOutput>(this TInputList source, Func<TInput, TOutput> itemConversion, Func<TOutputList> outputListConstructor)
where TInputList : IEnumerable<TInput>
where TOutputList : ICollection<TOutput>
{
TOutputList result = outputListConstructor();
foreach (TOutput convertedItem in source.Select(itemConversion))
{
result.Add(convertedItem);
}
return result;
}
}
如果您只需为您想要支持的每种喜爱的集合类型指定一种扩展方法,就可以更好地使用转换:
//Seting up inputs
IList<string> strings = new List<string> {"1.1", "2.2", "3.3"};
IEnumerable<string> enumerableStrings = strings.Select(x => x);
ObservableCollection<string> observableStrings = new ObservableCollection<string>(strings);
//Converting
IList<decimal> resultList = strings.Convert(decimal.Parse);
IEnumerable<decimal> resultEnumerable = enumerableStrings.Convert(decimal.Parse);
ObservableCollection<decimal> observableResult = observableStrings.Convert(decimal.Parse);
public static class EnumerableExtensions
{
public static IList<TOutput> Convert<TInput, TOutput>(this IList<TInput> source, Func<TInput, TOutput> itemConversion)
{
return source.Select(itemConversion).ToList();
}
public static IEnumerable<TOutput> Convert<TInput, TOutput>(this IEnumerable<TInput> source, Func<TInput, TOutput> itemConversion)
{
return source.Select(itemConversion);
}
public static ObservableCollection<TOutput> Convert<TInput, TOutput>(this ObservableCollection<TInput> source, Func<TInput, TOutput> itemConversion)
{
return new ObservableCollection<TOutput>(source.Select(itemConversion));
}
}