Mos*_*lan 8 c# variables types
我想用这样的东西:
if(x==5)
{
var mydb= ........ ;
}
else
{
var mydb = ........ ;
}
Run Code Online (Sandbox Code Playgroud)
但它没有用,因为我无法在if语句中声明变量.
所以我试着这样做:
var mydb;
if (x==5)
{
mydb= ............. ;
}
else
{
mydb=.............;
}
Run Code Online (Sandbox Code Playgroud)
但是id不起作用,因为我必须初始化变量(mydb).
所以问题是:我不一定知道变量的类型,我是否可以声明它然后更改if语句中的类型?
Jon*_*eet 11
不,你不能.变量永远不会改变它们的类型.你真正感兴趣的是什么类型?你能否将变量声明为某些公共基类型或它们都实现的接口?如果您能告诉我们您的情况,我们可以为您提供更多帮助.
C#是一种静态类型的语言(不考虑C#4;它引入了你真正需要它的动态类型,但是值得理解"正常"C#的做事方式).编译器需要知道变量的类型,以便if可以计算每个引用的含义.例如,如果您使用
string x = "text";
int y = x.Length;
Run Code Online (Sandbox Code Playgroud)
编译器需要知道它x是类型的,string以便它可以检查该类型是否具有Length属性并在IL中发出对它的调用.
您可以使用:
object mydb = null;
if(x==5)
{
mydb= ........ ;
}
else
{
mydb = ........ ;
}
Run Code Online (Sandbox Code Playgroud)
但是当您想要访问对象的字段,属性和方法时,您必须将对象取消装箱或强制转换回其正确的类型.除非你等待C#4,它可以促进动态方法(确切的术语:动态调度?)调用
C# 是静态类型的,除非您使用dynamicspecifier运行 4.0 ,因此除非通过多态,否则通常不可能更改类型。