gpt4 book ai didi

c# - 重载 + 运算符以添加两个数组

转载 作者:太空狗 更新时间:2023-10-29 19:52:14 26 4
gpt4 key购买 nike

这段 C# 代码有什么问题?我试图重载 + 运算符以添加两个数组,但得到如下错误消息:

二元运算符的参数之一必须是包含类型。

class Program
{
public static void Main(string[] args)
{
const int n = 5;

int[] a = new int[n] { 1, 2, 3, 4, 5 };
int[] b = new int[n] { 5, 4, 3, 2, 1 };
int[] c = new int[n];

// c = Add(a, b);
c = a + b;

for (int i = 0; i < c.Length; i++)
{
Console.Write("{0} ", c[i]);
}

Console.WriteLine();
}

public static int[] operator+(int[] x, int[] y)
// public static int[] Add(int[] x, int[] y)
{
int[] z = new int[x.Length];

for (int i = 0; i < x.Length; i++)
{
z[i] = x[i] + y[i];
}

return (z);
}
}

最佳答案

运算符必须在“相关”类的主体内声明。例如:

public class Foo
{
int X;

// Legal
public static int operator+(int x, Foo y);

// This is not
public static int operator+(int x, int y);
}

由于您无权访问数组的实现,最好的办法是将数组包装在您自己的实现中,这样您就可以提供额外的操作(这是使 operator+ 工作的唯一方法。

另一方面,您可以定义一个扩展方法,例如:

public static class ArrayHelper
{
public static int[] Add(this int[] x, int[] y) { ... }
}

这仍然会导致自然调用 (x.Add(y)),同时避免在您自己的类中包装数组。

关于c# - 重载 + 运算符以添加两个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1687395/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com