有没有一种方法可以将源数组的每个元素从一种类型转换为另一种类型?
Is there a method to convert each element of source array from one type to another type?
此Transfrom 函数根据某种规则将源数组的每个元素从一种类型转换为另一种类型。它有 2 个参数,其中一个是 Interface
public static TResult[] Transform<TSource, TResult>(this TSource[] source, ITransformer<TSource, TResult> transformer)
{
if (source == null || transformer == null)
{
throw new ArgumentNullException(nameof(source));
}
if (source.Length == 0)
{
throw new ArgumentException("Array is empty");
}
var res = Array.ConvertAll(source, transformer.Transform(source));
return res;
}
因为transformer.Transform(source)的参数无法从TSource[]转换为TSource
出现错误
这里是接口 ITransformer
public interface ITransformer<in TSource, out TResult>
{
TResult Transform(TSource obj);
}
ConvertAll
docs 表明该方法具有以下签名:
public static TOutput[] ConvertAll<TInput,TOutput> (TInput[] array, Converter<TInput,TOutput> converter);
如您所见,需要 Converter<TInput, TOutput>
。如果我们查看 docs ,我们可以看到它是一个具有以下签名的委托:
public delegate TOutput Converter<in TInput,out TOutput>(TInput input);
所以你应该能够像这样重写你的转换行:
var res = Array.ConvertAll(source, new Converter<TSource, TResult>(transformer.Transform));
此Transfrom 函数根据某种规则将源数组的每个元素从一种类型转换为另一种类型。它有 2 个参数,其中一个是 Interface
public static TResult[] Transform<TSource, TResult>(this TSource[] source, ITransformer<TSource, TResult> transformer)
{
if (source == null || transformer == null)
{
throw new ArgumentNullException(nameof(source));
}
if (source.Length == 0)
{
throw new ArgumentException("Array is empty");
}
var res = Array.ConvertAll(source, transformer.Transform(source));
return res;
}
因为transformer.Transform(source)的参数无法从TSource[]转换为TSource
出现错误这里是接口 ITransformer
public interface ITransformer<in TSource, out TResult>
{
TResult Transform(TSource obj);
}
ConvertAll
docs 表明该方法具有以下签名:
public static TOutput[] ConvertAll<TInput,TOutput> (TInput[] array, Converter<TInput,TOutput> converter);
如您所见,需要 Converter<TInput, TOutput>
。如果我们查看 docs ,我们可以看到它是一个具有以下签名的委托:
public delegate TOutput Converter<in TInput,out TOutput>(TInput input);
所以你应该能够像这样重写你的转换行:
var res = Array.ConvertAll(source, new Converter<TSource, TResult>(transformer.Transform));