我正在升级系统并检查另一个开发人员代码(C# 中的 ASP.NET)。
我遇到了这个:
private ReferralSearchFilterResults ReferralsMatched
{
get
{
if (Session[SESSION_REFERRAL_SEARCHFILTERRESULTS] == null || Session[SESSION_REFERRAL_SEARCHFILTERRESULTS].GetType() != typeof(ReferralSearchFilterResults))
return null;
else
return (ReferralSearchFilterResults)Session[SESSION_REFERRAL_SEARCHFILTERRESULTS];
}
set
{
if (value == null)
{
Session[SESSION_REFERRAL_SEARCHFILTERRESULTS] = value;
}
else if (value.GetType() == typeof(ReferralSearchFilterResults))
{
Session[SESSION_REFERRAL_SEARCHFILTERRESULTS] = value;
}
}
}
是否不需要检查 setter 上的类型?当然,如果我将该属性设置为 ReferralSearchFilterResults
对象以外的对象,代码甚至无法编译?我是否遗漏了什么,或者我是否正确地认为这可以通过使用来实现:
set
{
Session[SESSION_REFERRAL_SEARCHFILTERRESULTS] = value;
}
最佳答案
原始代码阻止 ReferralSearchFilterResults 的任何子类设置或获取属性。这是因为 value.GetType()
将返回 value
引用的对象的实际 Type
。如果该类型是 ReferralSearchFilterResults 的子类,则它将不等于 typeof(ReferralSearchFilterResults)
。
我不确定你的上下文,所以我不能告诉你这是否是正确的行为。如果它是预期的行为,它确实闻起来有点脏,因为它会默默地忽略子类的任何分配。但如果没有更多上下文,我无法真正做出判断。
关于c# - 这是冗余代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4277970/