【发布时间】:2021-09-28 08:42:27
【问题描述】:
我正在学习字典,迷失在这个问题中。
class Program
{
static void Main(string[] args)
{
Dictionary<A, B> dict = new Dictionary<A, B>();
A a = new A { A1 = 1, A2 = 2 };
B b = new B { B1 = 3, B2 = "foo" };
dict.Add(a, b);
A c = new A { A1 = 1, A2 = 2 };
Console.WriteLine($"dict.ContainsKey(a): {dict.ContainsKey(a)}");
Console.WriteLine($"dict.ContainsKey(c): {dict.ContainsKey(c)}");
Console.ReadLine();
}
}
class A
{
public int A1 { get; set; }
public int A2 { get; set; }
}
class B
{
public int B1 { get; set; }
public string B2 { get; set; }
}
这段代码的输出是:
dict.ContainsKey(a): True
dict.ContainsKey(c): False
我想要实现的是基于参数A1和A2获取B2的值。我希望dict.ContainsKey(c) 返回true,但由于某种原因它没有。
我可以做这样的事情,返回foo,但这似乎有点矫枉过正?:
(from f in dict.Keys where f.A1==1 && f.A2==2 select dict[f].B2).First()
如果我知道A1 和A2 的值,如何获得B2 的值?
【问题讨论】:
-
虽然 a 和 c 共享相同的值,但它们是不同的对象,具有不同的引用。
a!=c。这就是你所说的“某种原因” -
这是错误的,因为 C# 中的类是引用类型,而
a和c具有相同的值(即 A1 和 A2 相同)它们不是同一个实例,这就是默认选中。如果你愿意,你可以实现一个IEqualityComparer,它将A等同于它的值,并将它的一个新实例传递给 Dictionary 构造函数 -
虽然 a 和 c 共享相同的值但引用不同
标签: c# dictionary