【问题标题】:How to change a variable type in C#?如何在 C# 中更改变量类型?
【发布时间】:2011-02-04 08:31:26
【问题描述】:

我想用这样的东西:

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

但它不起作用,因为我无法在 if 语句中声明变量。

所以我尝试这样做:

var mydb;

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

但 id 也不起作用,因为我必须初始化变量 (mydb)。

那么问题来了:我不一定知道变量的类型,是否可以无论如何声明它,然后在if语句中更改类型?

【问题讨论】:

    标签: c# variables types


    【解决方案1】:

    你可以这样使用 布尔结果=(条件)?真:假;

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

    【讨论】:

      【解决方案2】:

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

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

      或使用显式转换

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

      DataType variableName1 = (castDataType) variableName2;
      

      【讨论】:

        【解决方案3】:

        你可以使用:

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

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

        【讨论】:

        • 除非您处理的是值类型,否则不会创建框,因此“拆箱”一词是不合适的。如果用作对象,则将值类型放入一个盒子中,以便将它们放入堆中(通常值对象只能存在于堆栈中)。
        【解决方案4】:

        我假设您有来自两个不同库的两种不兼容类型,它们都代表一个数据库。您可以编写一个具有通用操作的接口,并编写适配器来包装来自库的类并实现您的接口。比你的变量mydb 的类型可能是那个接口。

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

            • 动态类型的变量仍然具有静态类型:动态类型。无法更改变量的类型。
            【解决方案7】:

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

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

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

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

            【讨论】:

            猜你喜欢
            • 2023-03-25
            • 1970-01-01
            • 1970-01-01
            • 2019-05-23
            • 1970-01-01
            • 2016-08-30
            • 1970-01-01
            • 1970-01-01
            • 2019-12-03
            相关资源
            最近更新 更多