嗨,我有一个 var 变量,我需要根据 if 语句初始化它,这是我的代码:
var series = new ColumnSeries{};
if(integer == 0)
series = new LineSeries{};
else if (integer == 1)
series = new PieSeries{};
else if (integer == 2)
series = new AreaSeries{};
但是出现错误,我无法多次初始化变量,那么如何多次初始化此变量呢? 我需要根据 if 语句更改我的图表类型,所以我尝试了这种方式。
>var
是隐式类型;在您的情况下,它假定它应该是一个ColumnSeries
。
要使用基类(以便可以为其分配其他派生类),您可以强制转换初始化的对象或不使用 var。
Series series = new ColumnSeries(); //Preferred. var is just a bad choice here
var series = (Series)new ColumnSeries();
它们必须是相同的类型。编程到所有这些的通用接口,类似于ISeries。
通过首先将其实例化为ColumnSeries
,以后将无法将其分配给其他类型(除非它是实现ColumnSeries
的类型)。
相反,您可以将其声明为公共基类型(或接口),然后将其分配给实现该基类或接口的任何类型:
Series series =
integer == 0
? new LineSeries()
: integer == 1
? new PieSeries()
: integer == 2
? new AreaSeries()
: new ColumnSeries();
<</div>
div class="one_answers">虽然我建议不要这样做,但您可以使用类型dynamic
它可以在使用时更改其类型,因此您可以执行以下操作:
dynamic series = new ColumnSeries{};
if(integer == 0)
series = new LineSeries{};
else if (integer == 1)
series = new PieSeries{};
else if (integer == 2)
series = new AreaSeries{};
它的类型将分别更改为LineSeries()
、PieSeries
和AreaSeries
。这也意味着编译器在编译时不知道它有什么功能,因此您可以获得更少的安全性和更多的执行错误,以及更少的 IDE/自动完成支持。
虽然这不是 var 和对象的最佳用法,但我认为我们可以做这样的事情:
var series = new object();
但请记住,在为它分配某些内容后,它将保持为对象,您必须将其强制转换为所需的类型。
if(integer == 0)
series = new LineSeries{};
else if (integer == 1)
series = new PieSeries{};
else if (integer == 2)
series = new AreaSeries{};
假设满足第一个条件,以便访问系列属性,您需要将其转换为 LineSeries。
您还可以执行以下操作:
dynamic series = new object();
在这种情况下,一旦你为它分配了一些东西,它就不会是一个对象,所以不需要强制转换,但正如Austin Bryan在上面的回答中提到的,你失去了其他编译器和IDE的好处。