我们可以在函数中使用两次var。 e.g我们可以在这种情况下使用'var'
var varname= sometype;
if(true)
{
varname= type1;
}
else
{
varname=type2;
}
如果这是不可能的,我会说这是变种的限制。
我们可以在函数中使用两次var。 e.g我们可以在这种情况下使用'var'
var varname= sometype;
if(true)
{
varname= type1;
}
else
{
varname=type2;
}
如果这是不可能的,我会说这是变种的限制。
那么这只是使用var
本身一次 - 但只要你有一个表达式来初始化它,没关系。 (type1
和type2
将需要转换为的sometype
类型虽然)。
什么你不能做到这一点:
var x; // No initialization expression
if (condition)
{
x = firstExpression;
}
else
{
x = secondExpression;
}
有有是初始化表达式(其不能是匿名函数或null文字)。如果你想这样的事情,你可能会使用条件运算符:
var x = condition ? firstExpression : secondExpression;
是的,你可以在这种情况下使用var
,但只有sometype
是同一类型type1
和type2
的。
如果type1
和type2
其实都是不同的类型,你仍然可以使用var
当且仅当sometype
既type1
和type2
的超类。
如果在编译时不知道type1
和type2
是什么,则需要使用dynamic
而不是var
。如果您知道type1
和type2
都实现相同的接口,请在声明中使用接口而不是var
。
在线分配将定义var
的类型;如果type1
和type2
与sometype
兼容,则可以工作,但第一项任务毫无意义。如果它是一个ref类型,你也许可以投一个null
;这基本上是一个无操作:
var varname= (sometype)null;
但到那个时候,你还不如干脆不使用分配:
sometype varname;
可以说是一个更好的布局将是
var name = condition ? expr1 : expr2;
注如果没有明显的相同类型(可能它们是共同基类型的不同子类),则可能需要帮助它决定:
var name = condition ? (Foo)expr1 : expr2;
如果类型不相关,则不适合使用var
;你可能会发现object
或dynamic
更合适。
这是不可能的。 var
是类型安全的,意味着它的类型将从作业中推断出来。所以在你的例子中,var
是sometype类型。为其分配不同的类型将是不可能的(只要它们之间没有可能的转换)。
使用object
而不是var
可以在这种情况下工作。
你的例子很混乱。您不要将类型分配给变量,而是分配值。如果你说var varname=3;
那么varname
是int
。然后,您只能将整数(和转换为整数的值)分配给它,就像您已经说过int varname=3;
- 没有区别。
只要你有初始化语法,这是可能的。此外,最好使用var作为参考类型和值类型的类型
C#中的var类型需要对类型进行初始化。该类型在编译时确定并执行。当编译器确定类型会变化时,它会给它一个匿名类型(请参阅http://msdn.microsoft.com/en-us/library/bb397696.aspx)。
匿名类型只能转换为对象类型。所以简短的答案是否定的,你不能使用var来引用多个类型。即使是可以包含各种类型的对象本身也是一种类型,并且这种类型不能改变为另一种类型。从这个意义上说,var关键字可以让你变得灵活,但仍然是强类型。
如果您有各种类型的项目数组,编译器将实现anon类型到var,它本质上充当对象。一个体面的解释可以在:http://msdn.microsoft.com/en-us/library/bb384061.aspx找到。
您还没有使用var关键字两次。 – 2011-03-18 12:19:23