C# 更好的方法重写下面的方法

C# 更好的方法重写下面的方法,c#,asp.net-mvc,optimization,c#-7.3,C#,Asp.net Mvc,Optimization,C# 7.3,我有下面的方法,它确实有效,但我相信我们可以通过一些方法使它更好地摆脱这些if条件,但不确定如何 protected void SaveSession<T>(T sessionProperty, Management management) where T : class { string propertyType = typeof(T).Name; if (propertyType.Equals(typeof(A)

我有下面的方法,它确实有效,但我相信我们可以通过一些方法使它更好地摆脱这些if条件,但不确定如何

 protected void SaveSession<T>(T sessionProperty, Management management) where T : class
        {
            string propertyType = typeof(T).Name;

            if (propertyType.Equals(typeof(A).Name))
            {
                management.A = sessionProperty as A;
            }
            else if (propertyType.Equals(typeof(B).Name))
            {
                management.B = sessionProperty as B;
            }
            else if (propertyType.Equals(typeof(C).Name))
            {
                management.C = sessionProperty as C;
            }

            Session["mysession"] = management;
        }

我在C7中使用的是最新的C 7.0版,以后您可以使用模式匹配开关语句,例如:

switch(sessionProperty)
{
    case A a:
        management.A=a;
        break;
    case B b:
        management.B=b;
        break;
    case C c:
        management.C=c;
        break;
}
在早期版本中,您可以使用is运算符检查类型,例如:

if (sessionProperty is A)
{
    management.A=(A)sessionProperty;
}
else if (sessionProperty is B)
{
    management.B=(B)sessionProperty;
}

您使用的是哪个C版本?在C7和更高版本中,您可以使用模式匹配开关语句。我正在使用最新的C版本设置管理中的ArrayList属性。使用Enumerable.OfType进行筛选,并添加/设置sessionProperty变量。听起来是策略模式的好地方。除此之外,不要比较类型名,直接比较类型。@User最新发布的版本是7.3。最新的预览版本是8.0。我假设您使用的是C 7.3,或者至少是C 7?很抱歉,我使用的是最新的C 7.0版。如果可以更改管理,我建议在it+中使用ArrayList属性。OfType@User模式匹配在C语言中工作7@bradbury9为什么要这样做?减少管理中的财产数量。看起来是个糟糕的设计