【发布时间】:2015-03-26 02:59:58
【问题描述】:
目前我正在将 WPF 应用程序从 .Net Framework 3.5 迁移到 .Net Framework 4.5。在 .Net Framework 升级之后,应用程序现在将编译为 64 位而不是 32 位。编译应用程序时出现以下错误:
错误警告:可能是意外的参考比较;要进行值比较,请将左侧类型转换为“System.Type”
我的问题是:为什么现在我已经升级到 .Net 4.5 而之前从未在 .Net 3.5 上出现此错误?
我没有对项目的构建属性进行任何更改,两者都将设置Treat warnings as errors 设置为All。下面是产生错误的代码,我添加了一些关于我所做更改的 cmets,未注释的部分在 .Net 4.5 下编译。
private void FoldersListBoxMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
// Get typed sender
ListBox typedSender = sender as ListBox;
if (typedSender != null)
{
// Check if an item was double clicked
//The line below worked in .Net 3.5, but not in .Net 4.5
//if ((typedSender.SelectedItem != null) && (typedSender.InputHitTest(e.GetPosition(typedSender)) != typedSender.GetType()))
//And this is the line that I have changed (I added GetType()!).
if ((typedSender.SelectedItem != null) && (typedSender.InputHitTest(e.GetPosition(typedSender)).GetType() != typedSender.GetType()))
{
// Yes, set the new path
SelectedPath = typedSender.SelectedValue as string;
}
}
}
编辑:当此代码添加到应用程序时,我已经查找过,但无法找到它,因为 Subversion 存储库只能追溯到 6 年前。
【问题讨论】:
-
你能解释一下这个条件在检查什么(如你所想?)。 InputHitTest 返回
IInputElement,与typeof(ListBox) 比较背后的逻辑是什么?要双重确保? =D -
此错误可用since 2003(我假设这甚至来自以前的 c-sharp 编译器)。你确定你只是没有以某种方式忽略它吗?
-
@Sinatr:我的猜测是最初的程序员正在检查用户是否真的双击了 ListBox 中的项目,而不是滚动条。
标签: c# reference .net-3.5 comparison .net-4.5