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

时间:2010-04-05 06:43:15

标签: c# variables types

我想用这样的东西:

if(x==5)
{
    var mydb= ........ ;
}
else 
{
    var mydb = ........ ;
}

但它没有用,因为我无法在if语句中声明变量。

所以我试着这样做:

var mydb;

if (x==5)
{
    mydb= ............. ;
}
else 
{
    mydb=.............;
}

但是id也没有用,因为我必须初始化变量(mydb)。

所以问题是:我不一定知道变量的类型,我是否可以声明它然后更改if语句中的类型?

7 个答案:

答案 0 :(得分:11)

不,你不能。变量永远不会改变它们的类型。你真正感兴趣的是什么类型?你能否将变量声明为某些公共基类型或它们都实现的接口?如果您能告诉我们您的情况,我们可以为您提供更多帮助。

C#是一种静态类型的语言(不考虑C#4;它引入了你真正需要它的动态类型,但是值得理解“正常”C#的做事方式)。编译器需要知道变量的类型,以便if可以计算每个引用的含义。例如,如果您使用

string x = "text";
int y = x.Length;

编译器需要知道x的类型为string,以便它可以检查该类型是否具有Length属性并在IL中发出对它的调用。

答案 1 :(得分:6)

你可以使用:

object mydb = null;

if(x==5)
{
    mydb= ........ ;
}
else 
{
    mydb = ........ ;
}

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

答案 2 :(得分:4)

除非你使用dynamic specifier运行4.0,否则C#是静态类型的,所以除了通过多态之外,通常不可能改变类型。

答案 3 :(得分:1)

您可以声明基类型并从中继承这两种类型。但主要问题是: 如果你不知道它的类型,你将如何使用它?

答案 4 :(得分:1)

我假设您有两个不兼容的类型来自两个代表数据库的不同库。您可以编写一个带有公共操作的接口,并编写适配器来封装来自库的类并实现接口。比变量mydb的类型可以是该接口。

当然你可以使用object作为mydb的类型并使用动态类型测试和强制转换,但在这种情况下,这将是一个非常糟糕的设计决策。

答案 5 :(得分:0)

您可以使用 SYSTEM.CONVERT CLASS 这样或使用动态

string possibleInt = "1234"; 
int count = Convert.ToInt32(possibleInt);

或使用明确的转化次数

在C#中,您可以使用强制转换运算符执行显式转换。强制转换在圆括号中指定要转换的类型。以下代码示例中显示了执行显式转换的语法。

DataType variableName1 = (castDataType) variableName2;

答案 6 :(得分:0)

你可以这样使用 bool结果=(条件)? true:false;

var myDB = (x==5) ? true : false ;
or
var myDB = x==5 ? "doing something when case is true" : "doing something when case is false" ;