【发布时间】:2018-07-09 07:01:19
【问题描述】:
从 C# 7.2 开始,可以在结构上使用“ref”关键字来创建嵌入式引用。如何确定两个结构变量是否指向同一个引用? ReferenceEquals 总是返回 false:
示例代码:
struct MyStruct
{
public string Name { get; set; }
}
static void Main(string[] args)
{
MyStruct val1 = new MyStruct() { Name = "Value1" };
MyStruct val2 = new MyStruct() { Name = "Value2" };
MyStruct val4 = new MyStruct() { Name = "New name" };
ref var val3 = ref val1;
val1.Name = "New name";
Console.WriteLine("Val 1: " + val1.Name);
Console.WriteLine("Val 2: " + val2.Name);
Console.WriteLine("Val 3: " + val3.Name);
Console.WriteLine("Val3 eq Val1: " + val3.Equals(val1));
Console.WriteLine("Val3 eq Val2: " + val3.Equals(val2));
Console.WriteLine("Val3 eq Val4: " + val3.Equals(val4));
Console.WriteLine("Val3 ref eq Val1: " + object.ReferenceEquals(val3, val1));
Console.WriteLine("Val3 ref eq Val2: " + object.ReferenceEquals(val3, val2));
Console.ReadKey();
}
输出:
Val 1: New name
Val 2: Value2
Val 3: New name
Val3 eq Val1: True
Val3 eq Val2: False
Val3 eq Val4: True
Val3 ref eq Val1: False <--- This should return true
Val3 ref eq Val2: False
那么如何在 C# 7 中检查相同的 struct 引用?
【问题讨论】:
-
Eric Lippert 的这篇文章只是关于“普通”结构,但它可能仍然值得一读:blogs.msdn.microsoft.com/ericlippert/2009/04/27/…