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

它们是相等的,为什么当我比较纯 Guid 时它们不相等?

更新:

那么这里的问题可能是我使用了 3rd 方控件。

下面的 .Key 有一个 Guid,而 CommitteeId 也是一个 Guid。只有当我这样做时,他们才永远平等

ToString() 在两个 Guid 上它们相等,这很奇怪。

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

最佳答案

我无法重现该问题:

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());
    }
}

产生:
True
True
True

请给出一个类似的简短但完整的程序来演示问题。

编辑:我想我现在看到了问题,它在您的代码中:
if (ultraCalendarInfo.Owners[i].Key.ToString().Equals(committeeId))

你已经声明:



您在 Guid 上调用 ToString() 而不是在 committeeId 上调用,因此该条件永远不会成立。如果您在两者上都调用了 ToString() 或两者都不调用,那应该没问题。

我强烈怀疑这(或非常相似的东西,如果上面不是您的真实代码)是问题所在。当然,多次调用 ToString()(即 guid.ToString().ToString() 等)将始终返回相同的字符串 - 因此,如果您的 ToString() 调用次数不平衡(一侧为 0,另一侧为 1),则向双方添加额外的调用会“修复”问题……但删除 ToString() 调用之一才是真正的修复。

关于c# - MyGuid.Equals(OtherGuid) 不相等?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3512859/

10-16 05:07