Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将值从一个数组映射到另一个数组的通用扩展方法C_C# - Fatal编程技术网

C# 将值从一个数组映射到另一个数组的通用扩展方法C

C# 将值从一个数组映射到另一个数组的通用扩展方法C,c#,C#,我正在尝试进行一个泛型扩展,以从整数数组创建MyClass数组 我认为方法调用应该是这样的: MyClass[] myClassArray = intArray.MapValues(x => new MyClass(x)); 下面是我对我需要做什么的最佳猜测: public static TTarget[] MapValues<TSource, TTarget>(this TSource[] source, Func<TSource, TTarget> opera

我正在尝试进行一个泛型扩展,以从整数数组创建MyClass数组

我认为方法调用应该是这样的:

MyClass[] myClassArray = intArray.MapValues(x => new MyClass(x));
下面是我对我需要做什么的最佳猜测:

public static TTarget[] MapValues<TSource, TTarget>(this TSource[] source, Func<TSource, TTarget> operation) {
                
    TTarget[] target = new TTarget[source.Length];

    for (int i = 0; i < source.Length; i++) {            
        target[i] = operation; // problem is here "Cannot convert type Func<TSource, TTarget> to TTarget"
    }
    
    return target;
}

我不认为Func操作是我在这种情况下需要的,但我对扩展方法是新手,在互联网上找不到任何有用的东西,也不知道要搜索什么


提前感谢。

您不需要编写任何扩展方法,您可以使用如下选择:

MyClass[] myClassArray = intArray.Select(x => new MyClass()).ToArray();

此方法已存在:

MyClass[] myClassArray = Array.ConvertAll(intArray, x => new MyClass(x));

您也可以使用.Select,但它的输出不是数组。。。如果您将它与.ToArray结合使用,它的效率仍然低于Array。ConvertAll

operationsource[i]将为给定项调用函数,您只需使用select而不是您自己的扩展方法。请尝试以下操作:MyClass[]myClassArray=intArray.Selectx=>new MyClass.ToArray@Commonaught文档以及包括本文档在内的互联网上的许多站点都有使用Select的示例。@ArsalanValoojerdi:您应该将此作为答案发布。它可能对下一个提出类似想法的人有用。这当然是可吐的,而且比OP想要做的要简单得多