C# 无法混合ref和params关键字?

C# 无法混合ref和params关键字?,c#,linq,C#,Linq,我希望有一个映射函数可以实现以下功能: public static void Map<T>(IEnumerable<T> src, params T[] dst) { for (int i = 0; i < dst.Length; i++) dst[i] = src.ElementAt(i); } 这可能吗?它已经存在了吗?这是个坏主意吗 编辑:换句话说,我如何为这个实现提供任意数量的参数: public static void Map3&

我希望有一个映射函数可以实现以下功能:

public static void Map<T>(IEnumerable<T> src, params T[] dst)
{
    for (int i = 0; i < dst.Length; i++)
        dst[i] = src.ElementAt(i);
}
这可能吗?它已经存在了吗?这是个坏主意吗

编辑:换句话说,我如何为这个实现提供任意数量的参数:

public static void Map3<T>(IEnumerable<T> src, ref T a, ref T b, ref T c)
{
   a = src.ElementAt(0);
   b = src.ElementAt(1);
   c = src.ElementAt(2);
}
publicstaticvoidmap3(IEnumerablesrc,ref T a,ref T b,ref T c)
{
a=src.ElementAt(0);
b=src.ElementAt(1);
c=src.ElementAt(2);
}

你不能那样做。Params是C#编译器的一种便利,它只是在现场创建一个数组,并用参数填充它

由于数组不能包含“ref”变量,因此也不能以这种方式将“ref”传递给参数

您正在寻找一些语言所具有的类似“多重赋值”的功能。如果它存在,它的工作原理如下:

my (a,b,c,d) = enumerable.ToArray();
enumerable.ToArray().ReadValues(var1, var2, var3);    
见:

可以考虑一组扩展方法:

public static void ReadValues<T>(this T[] array, ref T t0){
   t0 = array[0];
}
public static void ReadValues<T>(this T[] array, ref T t0, ref T t1){
   t0 = array[0];
   t1 = array[1];
}
您甚至可以将其与Slice结合起来读取任意条目:

// reads indexes 3 to 7
enumerable.ToArray().Slice(3,4).ReadValues(var1, var2,var3,var4); 
请参见此处的切片:


是的,这里有很多不好的东西,甚至在你的坏主意之前;p首先,您是在复制现有功能。(
Enumerable.ToArray()
)编号。转换不是从IEnumerable到数组,而是从IEnumerable到任意数量的独立变量。看不出将数组设置为
ref
会有什么不同。您没有在函数中为实际数组指定新值。@poingpoing:这没有意义。请查看我更新的问题。您是正确的。事实上,我只是在寻找一种分配变量的方便方法。在你编辑之后,这是一个完美的答案。我希望避免写出t0=arr[0]。。。tn=arr[n]但正常。非常感谢。
// reads indexes 3 to 7
enumerable.ToArray().Slice(3,4).ReadValues(var1, var2,var3,var4);