C# 比较结构C中的两个变量#

C# 比较结构C中的两个变量#,c#,variables,structure,C#,Variables,Structure,我想做的是比较结构中相同变量的两个。 例如,我有一个这样的结构: struct player { public string name; public int number; } static player[] players = new player[3]; 我想做的是比较数字,这样如果两个玩家有相同的数字,就会发生一些事情 这就是我所尝试的,但是它总是说两个数字是相同的,因为它会比较两个相同的数字 for (int i

我想做的是比较结构中相同变量的两个。 例如,我有一个这样的结构:

    struct player
    {
        public string name;
        public int number;

    }
    static player[] players = new player[3];
我想做的是比较数字,这样如果两个玩家有相同的数字,就会发生一些事情

这就是我所尝试的,但是它总是说两个数字是相同的,因为它会比较两个相同的数字

  for (int i = 0; i < length; i++)
        {
           for (int j = 0; j < length; j++)
            {
                if (players[i].number == players[j].number)
                {
                    Console.WriteLine("Same");
                    Console.ReadLine();
                }
                else
                {
                    Console.WriteLine("Not");
                    Console.ReadLine();
                }
            }
for(int i=0;i
希望你明白我的意思。 任何帮助都将不胜感激!
谢谢

问题出在循环变量
i
j
中,这两个变量都从索引0开始。然后您将元素0与元素0进行比较,因此条件为真

更新此行:

 for (int j = 0; j < length; j++)
for(int j=0;j
为此:

 for (int j = i + 1; j < length; j++)
for(int j=i+1;j

编辑
更准确地说,该条件不仅对第一个元素计算为true,而且在
i
j
相同时对每个元素计算为true。此解决方案禁止两个控制变量在任何迭代中具有相同的值。

简单,只需添加一个检查以确保您没有比较相同的索引,因为这是同一对象:

for (int i = 0; i < length; i++)
{
    for (int j = 0; j < length; j++)
    {
        if (i == j) continue;

        if (players[i].number == players[j].number)
        {
            Console.WriteLine("Same");
            Console.ReadLine();
        }
        else
        {
            Console.WriteLine("Not");
            Console.ReadLine();
        }
    }
for(int i=0;i
使用类,并使用Linq进行操作:

public class Player
{
public string Name { get; set; }
public int Number { get; set; }
}
然后在另一个类中使用此方法进行交叉检查

    private void Match()
{
    var players = new Player[3].ToList();

    foreach (var found in players.ToList().Select(player => players.FirstOrDefault(p => p.Number == player.Number)))
    {
        if (found != null)
        {
            Console.WriteLine("Same");
            Console.ReadLine();
        }
        else
        {
            Console.WriteLine("Not");
            Console.ReadLine();
        }
    }
}

现在还不清楚问题出在哪里。你能澄清一下吗?你的代码有什么问题吗?还有:你不应该在这里使用
struct
,坚持
class
。@IvanStoev structs是值类型,这意味着它们在某些情况下,尤其是当它们像OP一样是可变的时,它们的行为可能与你预期的不同。请参阅:当然,如果你取消理解使用a(可变)的含义结构,并有他们解决的实际问题,去做吧。对于刚刚学习C#的人来说,最好还是坚持使用类。就我个人而言,我基本上遵循。考虑到这个问题的上下文,我猜这是一个游戏,可能是在unity或mono中。因为在垃圾收集(堆栈与堆存储)方面,它们的处理方式不同,结构在这些开发环境/框架中使用得更为频繁。仅针对每个j循环的第一次循环迭代…不应针对所有迭代…对于外部循环的第一次迭代和内部循环的第一次迭代,它将比较元素0到0,当然。但是,内部循环的下一次迭代--still外部循环的第一次迭代——将比较元素0和1,以此类推。我不反对有时你会比较同一个元素。我只是说这不是所有迭代都是正确的,这似乎是OP所说的发生了。我想重点是:我们不清楚OP的意思,因此我在帖子下发表了评论澄清。你不能回答一个不清楚的问题。问题中令人困惑的部分是“它总是说两个数字是相同的”。这就是我所争论的。我认为
OP
意味着它对数组中的每个元素都发生一次,因为它会比较元素0和元素0,一对一,依此类推。请解释一下你的答案如何解决OP的任何问题?