不能多次初始化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()
、PieSeries
和AreaSeries
。这也意味着编译器在编译时不知道它有什么功能,所以你会得到更少的安全性和更多的执行错误,并且更少 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 好处。
嗨,我有一个 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()
、PieSeries
和AreaSeries
。这也意味着编译器在编译时不知道它有什么功能,所以你会得到更少的安全性和更多的执行错误,并且更少 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 好处。