gpt4 book ai didi

c# - 为什么 C# 无法相互比较两种对象类型,而 VB 却不能?

转载 作者:IT王子 更新时间:2023-10-29 03:31:21 25 4
gpt4 key购买 nike

我在 C# 中有两个对象,但不知道它是 bool 值还是任何其他类型。但是,当我尝试比较那些 C# 时,无法给出正确的答案。我用 VB.NET 尝试了相同的代码,结果成功了!

如果有解决方案,谁能告诉我如何解决这个问题?

C#:

object a = true;
object b = true;
object c = false;
if (a == b) c = true;
MessageBox.Show(c.ToString()); //Outputs False !!

VB.NET:

Dim a As Object = True
Dim b As Object = True
Dim c As Object = False
If (a = b) Then c = True
MessageBox.Show(c.ToString()) '// Outputs True

最佳答案

在 C# 中,== 运算符(应用于引用类型表达式时)执行引用 相等性检查,除非它被重载。您正在比较两个引用,它们是装箱转换的结果,因此它们是不同的引用。

编辑:对于重载 == 的类型,您可以获得不同的行为 - 但那是基于表达式的编译时 类型。例如,string 提供了==(string, string):

string x = new string("foo".ToCharArray());
string y = new string("foo".ToCharArray());
Console.WriteLine(x == y); // True
Console.WriteLine((object) x == (object) y); // False

这里第一个比较是使用重载运算符,而第二个是使用“默认”引用比较。

在 VB 中,= 运算符做了更多的工作 - 它甚至不等同于使用 object.Equals(x, y),例如 Option Compare可以影响文本的比较方式。

从根本上说,运算符的工作方式不同,也不打算以相同的方式工作。

关于c# - 为什么 C# 无法相互比较两种对象类型,而 VB 却不能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14837209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com