不能多次初始化 var 变量



嗨,我有一个 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()PieSeriesAreaSeries。这也意味着编译器在编译时不知道它有什么功能,因此您可以获得更少的安全性和更多的执行错误,以及更少的 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的好处。

相关内容

  • 没有找到相关文章