如何在C#中更改变量类型?

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中发出对它的调用.


Mic*_*uen 6

您可以使用:

object mydb = null;

if(x==5)
{
    mydb= ........ ;
}
else 
{
    mydb = ........ ;
}
Run Code Online (Sandbox Code Playgroud)

但是当您想要访问对象的字段,属性和方法时,您必须将对象取消装箱或强制转换回其正确的类型.除非你等待C#4,它可以促进动态方法(确切的术语:动态调度?)调用

  • +1因为到目前为止这个答案似乎最接近OP的要求.但是,您可能最初必须将`mydb`设置为`null`以避免编译器警告/错误. (2认同)

Ign*_*ams 5

C# 是静态类型的,除非您使用dynamicspecifier运行 4.0 ,因此除非通过多态,否则通常不可能更改类型。

  • 类型为动态的变量仍然有一个静态类型:动态类型。没有办法改变*变量*的类型。 (2认同)