2011-03-18 72 views
0

我们可以在函数中使用两次var。 e.g我们可以在这种情况下使用'var'

var varname= sometype; 
if(true) 
{ 
    varname= type1; 
} 
else 
{ 
    varname=type2; 
} 

如果这是不可能的,我会说这是变种的限制。

+7

您还没有使用var关键字两次。 – 2011-03-18 12:19:23

回答

7

那么这只是使用var本身一次 - 但只要你有一个表达式来初始化它,没关系。 (type1type2将需要转换为的sometype类型虽然)。

什么你不能做到这一点:

var x; // No initialization expression 
if (condition) 
{ 
    x = firstExpression; 
} 
else 
{ 
    x = secondExpression; 
} 

是初始化表达式(其不能是匿名函数或null文字)。如果你想这样的事情,你可能会使用条件运算符:

var x = condition ? firstExpression : secondExpression; 
1

是的,你可以在这种情况下使用var,但只有sometype是同一类型type1type2的。

如果type1type2其实都是不同的类型,你仍然可以使用var当且仅当sometypetype1type2的超类。

如果在编译时不知道type1type2是什么,则需要使用dynamic而不是var。如果您知道type1type2都实现相同的接口,请在声明中使用接口而不是var

1

在线分配将定义var的类型;如果type1type2sometype兼容,则可以工作,但第一项任务毫无意义。如果它是一个ref类型,你也许可以投一个null;这基本上是一个无操作:

var varname= (sometype)null; 

但到那个时候,你还不如干脆不使用分配:

sometype varname; 

可以说是一个更好的布局将是

var name = condition ? expr1 : expr2; 

注如果没有明显的相同类型(可能它们是共同基类型的不同子类),则可能需要帮助它决定:

var name = condition ? (Foo)expr1 : expr2; 

如果类型不相关,则不适合使用var;你可能会发现objectdynamic更合适。

0

这是不可能的。 var是类型安全的,意味着它的类型将从作业中推断出来。所以在你的例子中,var是sometype类型。为其分配不同的类型将是不可能的(只要它们之间没有可能的转换)。

使用object而不是var可以在这种情况下工作。

1

你的例子很混乱。您不要将类型分配给变量,而是分配值。如果你说var varname=3;那么varnameint。然后,您只能将整数(和转换为整数的值)分配给它,就像您已经说过int varname=3; - 没有区别。

0

只要你有初始化语法,这是可能的。此外,最好使用var作为参考类型和值类型的类型

0

C#中的var类型需要对类型进行初始化。该类型在编译时确定并执行。当编译器确定类型会变化时,它会给它一个匿名类型(请参阅http://msdn.microsoft.com/en-us/library/bb397696.aspx)。

匿名类型只能转换为对象类型。所以简短的答案是否定的,你不能使用var来引用多个类型。即使是可以包含各种类型的对象本身也是一种类型,并且这种类型不能改变为另一种类型。从这个意义上说,var关键字可以让你变得灵活,但仍然是强类型。

如果您有各种类型的项目数组,编译器将实现anon类型到var,它本质上充当对象。一个体面的解释可以在:http://msdn.microsoft.com/en-us/library/bb384061.aspx找到。

相关问题