初始化和范围通用抽象类

时间:2011-08-16 21:26:25

标签: c# asp.net-mvc-3

我有以下代码

            var dataCollection;
            if (ViewBag.WageType.ToLower() == "perm")
            {
                dataCollection = ViewBag.PermWageIndex;
            }
            else if(ViewBag.WageType.ToLower() == "trial")
            {
                dataCollection = ViewBag.TrialWageIndex;
            }

返回类型可以是AbstractClass<Concrete1>AbstractClass<Concrete2>。我必须在声明时初始化var。但是,这意味着我失去了我想要的范围。如何修改此代码以允许动态dataCollections而不依赖于ViewBag?

2 个答案:

答案 0 :(得分:2)

解决此问题的唯一方法是提供由Concrete1Concrete2继承/实现的基类或接口,以便将dataCollection声明为AbstractClass<ISomething>

Var不是动态类型,它在编译时解析。因此,如果没有赋值(var x;),则无法声明变量,因为编译器无法推断出类型。

您可以回退到objectdynamic,但如果您这样做,则会失去任何类型的安全。

答案 1 :(得分:2)

您可以让AbstractClass<>实现接口IAbstractClass,然后将其设为常用类型。

这是否有效取决于返回类型需要访问的成员。显然,它无法引用任何一般类型的成员,但这无论如何都没有多大意义,因为我假设消费者不应该知道通用参数是什么。