不能多次初始化var变量

cant initialize var variable more than once

嗨,我有一个 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 语句更改我的图表类型,所以我尝试了这种方式。

它们必须是同一类型。为所有这些编程到一个通用接口,比如 ISeries。

var 是隐式类型;在您的情况下,它假定它应该是 ColumnSeries.

要使用基础 class(以便可以将其他派生的 classes 分配给它),您可以强制转换初始化对象或不使用 var.

Series series = new ColumnSeries(); //Preferred. var is just a bad choice here
var series = (Series)new ColumnSeries();

首先将其实例化为 ColumnSeries,之后您将无法将其分配给其他类型(除非它是实现 ColumnSeries 的类型)。

相反,您可以将其声明为通用基类型(或接口),然后将其分配给实现该基 class 或接口的任何类型:

Series series = 
    integer == 0
        ? new LineSeries()
        : integer == 1
            ? new PieSeries()
            : integer == 2
                ? new AreaSeries()
                :  new ColumnSeries();

虽然我不建议这样做,但您可以使用 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/Auto-complete 支持。

虽然这不是 var 和 object 的最佳用法,但我认为我们可以这样做:

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 好处。