c# - "composite"变量类型的正确实现是什么?

标签 c# variables c#-4.0

我有一个程序必须使用复合键来管理对象。 这个键,简单来说就是几个字符串。

我有以下代码:

public struct MyKey
{
    public string Part1 { get; set;} // always set
    public string Part2 { get; set;} // can be null
    public MyKey(string part1, string part2) : this()
    {
        this.Part1 = part1;
        this.Part2 = part2;
    }
}

这可以用来存储我的值。

现在我希望能够:

  • 使用等于运算符(part1 和 part2 相等)
  • 在字典中使用键,尤其是使用 Contains 方法

我猜了很多事情(重写等于运算符、重写 GetHashCode 和 Equals 方法、实现 IComparable 等),但我不确定实现我的目标需要哪些必要步骤以及什么会导致开销.

提前谢谢

最佳答案

使用 .NET 4.0 Tuple , 它有一个正确的 Equals()GetHashCode()基于组件值。我以前使用过元组,或者如果它们是字符串键,你总是可以用分隔符连接,但如果你真的想保留那个类作为你的键,你确实需要一个适当的 Equals() 和 GetHashCode(),所以在那种情况下有YourType 工具 IEqualityComparer<YourType> .

附注如果您想手动而不是元组来覆盖 GetHashCode(),这是一个很好的示例...

What is the best algorithm for an overridden System.Object.GetHashCode?

关于c# - "composite"变量类型的正确实现是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5514611/

相关文章:

c# - 无法将 lambda 表达式转换为类型 'System.Delegate'

java - 通过变量中的数字更改小数位-JAVA

ruby-on-rails - 为什么初始化变量如此重要?

wpf - 单击登录按钮时,我想隐藏当前窗口

c# - 将一个复杂的字符串分成 3 部分

c# - 如何理解 WCF 跟踪

php - 用变量中的数字增加变量 + PHP

.net - 如何调试随机挂起

c# - 将枚举的内容获取到下拉列表

C# 单元测试中如何过滤非断言异常