我正在做一个包含虚拟键盘的wpf应用程序,当我点击CapsLock按钮时,我收到了这个通知:
Possibility of comparing references involuntary for a comparison of values, cast the left hand side to type 'string'
在这一行:
if (btnVK_A.Content == "a")
btnVK_A.Content = "A";
else
btnVK_A.Content = "a";
我将btnVK_A.Content
转换为字符串,但仍然显示通知。那么我该如何解决这个问题?
答案 0 :(得分:4)
试试这个:
if ((btnVK_A.Content as string) == "a")
as
关键字与ToString()
之间的差异:
这两个用于不同目的。任何对象的ToString
方法都应该返回该对象的字符串表示。如前所述,转换是完全不同的,as
关键字执行条件转换。 as
关键字基本上表示“如果该对象是此类型,则向我提供此类型的引用”,而ToString
表示“获取该对象的字符串表示”。结果在某些情况下可能是相同的,但两者绝不应该被认为是可以互换的,因为正如我所说,它们存在于不同的目的。如果您打算投射,则应始终使用演员,而不是ToString
。
答案 1 :(得分:0)
首先尝试使用'var'来接受密钥。 然后检查你想要的东西。
var b =(string)btnVK_A.Content;
if(b ==“a”) btnVK_A.Content =“A”; 其他 btnVK_A.Content =“a”;
答案 2 :(得分:0)
您是否尝试过使用btnVK_A.Content.ToString()或(string)btnVK_A.Content?由于Button Content属性属于对象类型,因此如果在比较之前没有强制转换或将其转换为字符串,编译器会给出警告。