c# - 此代码是否依赖于字符串实习才能工作?

标签 c# string

我正在为字典创建一个键,它是两个字符串的结构。当我在控制台应用程序中测试此方法时,它有效,但我不确定它有效的唯一原因是否是因为字符串被驻留并因此具有相同的引用。

Foo foo1 = new Foo();
Foo foo2 = new Foo();
foo1.Key1 = "abc";
foo2.Key1 = "abc";
foo1.Key2 = "def";
foo2.Key2 = "def";

Dictionary<Foo, string> bar = new Dictionary<Foo, string>();
bar.Add(foo1, "found");

if(bar.ContainsKey(foo2))
    System.Console.WriteLine("This works.");
else
    System.Console.WriteLine("Does not work");

结构很简单:

public struct Foo
{
    public string Key1;
    public string Key2;
}

是否有任何情况会导致此操作失败,或者我是否可以将其作为唯一 key ?

最佳答案

根据 Microsoft 的文档,如果您打算使用自己的数据结构作为哈希表中的键,您应该始终重写 GetHashCode(),否则您可能不安全。

“在 Hashtable 对象中用作键的对象也必须覆盖 GetHashCode 方法,因为这些对象必须生成自己的哈希码。”

http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx

关于c# - 此代码是否依赖于字符串实习才能工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2147992/

相关文章:

c# - ASP.NET MVC 3 : StackOverflowException when using PartialView

c - 从字符串数组中打印排序的字符串

java - 从字符串转换为对象时出现类型转换错误

c# - HKEY_USERS 仅包含登录用户

c# - 使用 C# 获取此 xml 值

ruby - 如何在 Ruby 中找到字符串的第一个非重复出现的字母?

java - 如何根据值的动态条目拆分字符串数组?

Java:在大字典中搜索字符串的非常快速的方法

c# - 使用依赖于 .NET 6 应用程序中的 NLog 的第三方库

c# - 在 Irony 中定义常量和运算符