这是多余的代码吗?

Jam*_*mie 5 c# asp.net properties

我正在升级系统并正在浏览另一个开发人员代码(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;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

检查设置器上的类型是否不必要?当然,如果我将属性设置为ReferralSearchFilterResults对象之外的其他东西,代码甚至不会编译?我错过了什么,或者我认为只要使用以下方法就可以实现:

set
{
    Session[SESSION_REFERRAL_SEARCHFILTERRESULTS] = value;
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*ers 3

原始代码阻止 ReferralSearchFilterResults 的任何子类设置或获取该属性。这是因为将返回所引用的对象的value.GetType()实际值。如果该 Type 是 ReferralSearchFilterResults 的子类,那么它不会 equals 。Typevaluetypeof(ReferralSearchFilterResults)

我不确定您的背景,所以我无法告诉您这是否是正确的行为。如果这是预期的行为,它确实闻起来有点脏,因为它会默默地忽略子类的任何分配。但如果没有更多背景,我无法真正做出判断。