if (this.UserManagmentType != UserMgmtType.NONE)
{
return (User)GetUserBaseById(userId);
}
if (this.UserManagmentType != UserMgmtType.NONE)
{
return GetUserBaseById(userId) as User;
}
我理解演员之间的区别。如果转换失败,第一个if语句应抛出无效的强制转换异常,而第二个if语句将返回null。
我的问题是,对于多线程环境中的重载的,为什么第一个if语句偶尔会返回null,而第二个if语句总是会返回有效数据? / p>
另一个注意事项是包含方法是WCF端点。 感谢您的任何见解。
答案 0 :(得分:3)
根据您发布的代码,答案是:它不会。
如果(且仅当)null
返回null,则第一个代码段将返回GetUserBaseById
。如果方法的返回为null
,则第二个将返回null
,如果它不是User
对象,则返回。这种行为在重负荷下不会改变。
如果您在重载时看到不同的结果,那么我建议您在代码的其他地方遇到多线程问题,而这恰好就是您正在看到效果的地方。这种错误可能对外部条件非常敏感,并且您无法保证每次运行时它都会以相同的方式重现(因为它可能对其他进程的磁盘争用敏感)。
我建议彻底审查有问题的多线程功能:您遇到的问题不在于该行代码。
答案 1 :(得分:0)
两种铸件是不同的,根据本文
http://www.codeproject.com/Articles/8052/Type-casting-impact-over-execution-performance-in
使用as关键字更快,我认为这与返回值总是相比,而且与前缀强制相比。
但是我认为您需要仔细检查如何实现GetUserBaseById(userId)
方法,因为我怀疑它可能无法在多线程环境中正确实现。