重载运算符时如何放置 6 个值?但是之后还可以加值吗?

How you can put 6 values when overloading an operator? But values also can be added after?

好的,我知道这看起来很复杂。 首先,代码必须采用 2 个字符串和 2 个整数,并根据输入将它们拼在一起,然后输出结果,就像:

输入: 戴夫 8个 杰西卡 7

输出: 戴夫和杰西卡 15

我尝试了很多次不同的方法,但 none 似乎有效:(

我尝试将 name1 或 name2 之类的字符串放入 DancerPoints Class 但我找不到连接输入的方法我的意思是它在那里但无法获得输入。

我也试过直接将值放入参数,但它说运算符只能取 2 个值,但我需要 6 个! 4 个舞者值 2 个管理值。

此时它只获取 firstdancer 的字符串和 int 并使用它,但我不知道如何添加 seconddancer 的值。

我为此工作了 3 个晚上,我不知道还能做什么? :(

using System;
using System.Collections.Generic;

namespace Code_Coach_Challenge
{
    class Program
    {
        // I tried putting values here with public but why that not workked I dont know :(

        static void Main(string[] args)
        {
            string name1 = Console.ReadLine();
            int points1 = Convert.ToInt32(Console.ReadLine());
            string name2 = Console.ReadLine();
            int points2 = Convert.ToInt32(Console.ReadLine());

            DancerPoints dancer1 = new DancerPoints(name1, points1);
            DancerPoints dancer2 = new DancerPoints(name2, points2);

            DancerPoints total = dancer1 + dancer2;
            Console.WriteLine(total.name);
            Console.WriteLine(total.points);
        }
    }

    class DancerPoints
    {
        public string name;
        public int points;
                            // I tried putting values here no luck.error CS7036
        public DancerPoints(string name, int points)
        {
            this.name = name;
            this.points = points;
                                  // I tried putting values here no luck.error CS7036
        }

        //overload the + operator
        public static DancerPoints operator+ (DancerPoints n, DancerPoints p)
        {
                                     // I tried putting values here no luck.error CS7036
            string name = n.name + " & " + n.name;
            int points = p.points + p.points;
           
            DancerPoints res = new DancerPoints(name, points);

            return res;
            
  
        }
    }
}

您的运算符重载应该是:

public static DancerPoints operator+ (DancerPoints n, DancerPoints p)
    {
        string name = n.name + " & " + p.name;
        int points = n.points + p.points;
       
        DancerPoints res = new DancerPoints(name, points);

        return res;
    }

请注意我是如何将 n 变成 p 并将 p 变成 n 的。 这样 n 和 p 的名称和点值都被使用了。

如果你想让程序做的只是

,你可以简化很多代码
  1. 询问 Name1
  2. 求积分1
  3. 询问 Name2
  4. 求积分2
  5. 打印{Name1} & {Name2} {Points1 + Points2}
string name1 = Console.ReadLine();
int points1 = Convert.ToInt32(Console.ReadLine());
string name2 = Console.ReadLine();
int points2 = Convert.ToInt32(Console.ReadLine());

string output = $"{name1} & {name2} {points1 + points2}"
Console.WriteLine(output);

只是简单的字符串连接。不需要任何花哨的 类 或运算符重载。


现在,如果您想将代码扩展为同时处理两个以上的人,那么

class Dancer
{
    public string Name {get;set;}
    public int Score {get;set;}
}

var dancers = new List<Dancer>
{
    new Dancer { Name = "David", Score = 8 },
    new Dancer { Name = "Jessica", Score = 7 },
    new Dancer { Name = "Sally", Score = 6 },
}

var allNames = string.Join(" & ", dancers.Select(x => x.Name));
var totalScore = dancers.Sum(x => x.Score);
var output = $"{allNames} {totalScore}"

通过这个例子你会得到

David & Jessica & Sally 21

同样,不需要运算符重载。将舞者一起“添加”到一个新的“舞者”对象中并没有什么意义。