当我使用 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/