c# - 这是冗余代码吗?

标签 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;
        }
    }

}

是否不需要检查 setter 上的类型?当然,如果我将该属性设置为 ReferralSearchFilterResults 对象以外的对象,代码甚至无法编译?我是否遗漏了什么,或者我是否正确地认为这可以通过使用来实现:

set
{
    Session[SESSION_REFERRAL_SEARCHFILTERRESULTS] = value;
}

最佳答案

原始代码阻止 ReferralSearchFilterResults 的任何子类设置或获取属性。这是因为 value.GetType() 将返回 value 引用的对象的实际 Type。如果该类型是 ReferralSearchFilterResults 的子类,则它将不等于 typeof(ReferralSearchFilterResults)

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

关于c# - 这是冗余代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4277970/

相关文章:

c# - 结构相等性如何与 Int32 一起使用?

ASP.NET 命名空间

c# - 从页面外部访问应用程序状态

ASP.net 3.5 布局问题

java - 在多模块 Maven 项目中,将跨不同模块使用的属性文件放在哪里?

java - 如何使用 Spring PropertyPlaceholderConfigurer 从另一个属性文件调用属性文件?

python - 以编程方式设置属性

c# - 什么是 ("{0,1} ", num);意思是?

c# - Xamarin,Grpc,无法使用 token 0100002b 解析类型

C# SMO 数据库不记录创建