初始化泛型抽象类并将其作用域化

本文关键字:作用域 泛型 抽象类 初始化 | 更新日期: 2023-09-27 18:06:02

我有以下代码

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

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

初始化泛型抽象类并将其作用域化

您可以让AbstractClass<>实现IAbstractClass接口,然后使其成为通用类型。

这是否有效取决于返回类型需要访问哪些成员。显然,它不能引用任何泛型类型的成员,但这也没有多大意义,因为我假设消费者不应该知道泛型形参是什么。

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

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

你可以回到objectdynamic,但如果你这样做,你会失去任何类型安全