是否可以比较两个托管引用(类型为ref T
)如果它们相等?我的意思不是对对象的引用,而是对变量的引用。例子:
public static bool Compare(ref int a, ref int b)
{
return ref a == ref b; //something like that, not possible this way in C#
}
int x, y;
Compare(ref x, ref x); //true
Compare(ref x, ref y); //false
明确的参考(没有双关语)在这里 -相等比较(C# 编程指南) http://msdn.microsoft.com/en-us/library/dd183752.aspx.
您可以比较两个类型的对象T
通过使用来实现引用相等对象.ReferenceEquals http://msdn.microsoft.com/en-us/library/system.object.referenceequals(v=vs.110).aspx如果(据我所知只有如果)T
是一个引用类型。
正如 Haedrian 指出的那样,这即使值类型是通过引用传递的,也是不可能的 http://blogs.msdn.com/b/vijaysk/archive/2008/03/19/object-referenceequals-valuevar-valuevar-will-always-return-false.aspx由于通话中的拳击ReferenceEquals
.
int x = 0, y = 0;
IsSameReference(ref x, ref x).Dump(); // Passing the same value type variable twice, by reference. We want a result of 'true'
IsSameReference(ref x, ref y).Dump(); // We expect 'false'
public static bool IsSameReference(ref int a, ref int b)
{
return Object.ReferenceEquals(a, b);
}
两个调用都转储false
。 (注意我将函数重命名为Compare
因为这通常用于排序比较)。
本质上来说,哪里T
可以是任何类型,答案是否定的。
(带有 int 的乐趣和游戏仅从答案中删除,并由另一个答案取代)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)