区分某些关键对象

Distinct Certain Key Object

我的字典里有这个关键词:

public class KKey
{
    public string Name { get; set; }
    public Guid Guid { get; set; }
}

Dictionary<KKey, string> myDictionary = new Dictionary<KKey, string>();

问题是每次我生成新的 Guid 时,这个条件都不起作用:

if (false == myDictionary.TryGetValue(key, out keyobj))

因为 Guid 密钥是新的...

现在我的问题是,我如何设置条件来验证 Kkey.Name 是否已添加,然后不添加?

您要么需要创建自定义比较器,要么让您的 class 覆盖 EqualsGetHashCode

选项 1:比较器

sealed class NameEqualityComparer : IEqualityComparer<KKey>
{
    public bool Equals(KKey x, KKey y)
    {
        return string.Equals(x.Name, y.Name);
    }

    public int GetHashCode(KKey obj)
    {
        return (obj.Name != null ? obj.Name.GetHashCode() : 0);
    }
}

Dictionary<KKey, string> myDictionary = new Dictionary<KKey, string>(new NameEqualityComparer());

选项 2:覆盖

public class KKey : IEquatable<KKey>
{
    public string Name { get; set; }
    public Guid Guid { get; set; }

    public bool Equals(KKey other)
    {
        if (ReferenceEquals(null, other)) return false;
        if (ReferenceEquals(this, other)) return true;
        return string.Equals(Name, other.Name);
    }

    public override bool Equals(object obj)
    {
        return Equals(obj as KKey);
    }

    public override int GetHashCode()
    {
        return (Name != null ? Name.GetHashCode() : 0);
    }
}

Dictionary<KKey, string> myDictionary = new Dictionary<KKey, string>();

也可以

bool alreadyAdded = keywordList.Any(n => n.Key.Name == name);
if (!alreadyAdded) { }