MyGuid.Equals(OtherGuid)不等于?

Pan*_*lla 3 c# compare guid

当我使用MyGuid.ToString().Equals(OtherGuid.ToString())时

他们是平等的,为什么当我比较纯粹的Guid时他们不平等?

更新:

那么这里的问题可能是我使用了第三方控件.

下面的.Key有一个Guid,委员会也是一个Guid.只有当我这样做时,它们才是平等的

两个Guid上的ToString()它们都是奇怪的.

 for (int i = 0; i < this.ultraCalendarInfo.Owners.Count; i++) 
                if (ultraCalendarInfo.Owners[i].Key.ToString().Equals(committeeId))
                    ultraCalendarInfo.Owners[i].Visible = isVisible; 
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 13

我无法重现这个问题:

using System;

class Program
{
    static void Main(string[] args)
    {
        Guid x = Guid.NewGuid();
        Guid y = new Guid(x.ToString());

        Console.WriteLine(x == y);
        Console.WriteLine(x.Equals(y));
        Console.WriteLine(x.ToString() == y.ToString());
    }
}
Run Code Online (Sandbox Code Playgroud)

生产:

True
True
True
Run Code Online (Sandbox Code Playgroud)

请提供类似的简短但完整的程序来说明问题.

编辑:我想我现在看到了问题,它在你的代码中:

if (ultraCalendarInfo.Owners[i].Key.ToString().Equals(committeeId))
Run Code Online (Sandbox Code Playgroud)

你说过:

在.Key下面有一个GUID并且committeeId是一个GUID了.

你正在呼唤ToString()Guid,但没有打开committeeId,因此这种情况永远不会成真.如果你叫ToString()上两个或既不应该罚款.

我强烈怀疑这个(或者非常类似的东西,如果以上不是你真正的代码)是问题.当然,ToString()多次调用(即guid.ToString().ToString()等等)将始终返回相同的字符串 - 因此,如果您的ToString()呼叫数量不平衡(一方为0而另一方为1),则向双方添加额外呼叫将 "修复"问题...但删除其中一个ToString()电话是真正的修复.