This question already has answers here:
Dictionary KeyNotFoundException even though Key exists
(3个答案)
KeyNotFoundException in filled dictionary
(2个答案)
在10个月前关闭。
我无法通过键找到字典条目。我有一个如下界面:
然后我有一个像这样的字典:
当我尝试通过键从字典中检索元素时,出现KeyNotFoundException。我假设我必须执行某种类型的比较-如果我的假设正确,那么在这种情况下建议的比较方法是什么?
或这个:
取决于您希望它如何表现。
(3个答案)
KeyNotFoundException in filled dictionary
(2个答案)
在10个月前关闭。
我无法通过键找到字典条目。我有一个如下界面:
public interface IFieldLookup
{
string FileName { get; set; }
string FieldName { get; set; }
}
然后我有一个像这样的字典:
Dictionary<IFieldLookup, IField> fd
当我尝试通过键从字典中检索元素时,出现KeyNotFoundException。我假设我必须执行某种类型的比较-如果我的假设正确,那么在这种情况下建议的比较方法是什么?
最佳答案
由于这是一个接口而不是一个类,因此您必须为实现该接口的每个类定义相等运算符。这些操作员将需要稳定地操作。 (如果它是一个类而不是一个接口,那会更好。)
您必须在每个类上覆盖Equals(object)
和GetHashCode()
方法。
大概是这样的:
public override bool Equals(object obj)
{
IFieldLookup other = obj as IFieldLookup;
if (other == null)
return false;
return other.FileName.Equals(this.FileName) && other.FieldName.Equals(this.FieldName);
}
public override int GetHashCode()
{
return FileName.GetHashCode() + FieldName.GetHashCode();
}
或这个:
public override bool Equals(object obj)
{
IFieldLookup other = obj as IFieldLookup;
if (other == null)
return false;
return other.FileName.Equals(this.FileName, StringComparison.InvariantCultureIgnoreCase) && other.FieldName.Equals(this.FieldName, StringComparison.InvariantCultureIgnoreCase);
}
public override int GetHashCode()
{
return StringComparer.InvariantCulture.GetHashCode(FileName) +
StringComparer.InvariantCulture.GetHashCode(FieldName);
}
取决于您希望它如何表现。
关于c# - 在通用词典中找不到关键字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2389110/
10-10 17:02