【问题标题】:I want to make an if statement in c# with a class instead of a variable in it我想在 c# 中用一个类而不是一个变量来创建一个 if 语句
【发布时间】:2020-04-16 23:41:02
【问题描述】:

我想写

double num1;

if(num1 != double) 
{
Console.WriteLine("Invalid operator.");
}

但我收到一条错误消息,提示“无效的表达式术语 'double'” 如果 num1 不是双精度数,我想让 if 语句写“无效运算符”。

【问题讨论】:

  • 你想要什么?请详细说明,这没有意义。您希望 if 条件做什么?
  • num1 是双重的。它只能是双精度。
  • 看来你要找的是if (num1.GetType() != typeof(double))。更多信息herehere
  • 或者,您可以使用is 运算符:if(num1 is double) { }
  • I want to have the if statement write "Invalid operator" if num1 isn't a double. 在什么情况下你认为num1 不是 是双重的?

标签: c#


【解决方案1】:

意图

您的问题符合语法但没有逻辑意义。

 double num1;

num1 double。它只能是double,因为您明确声明它是double

if(num1 != double) 

除了语法错误,因为num1 double,所以检查是完全没有必要的。它永远不会是真的,所以检查它是没有意义的。


语法

话虽如此,您的num1 != double 语法无效。您正在尝试将变量的 与给定的变量 type 进行比较。您正在比较苹果和梨,而编译器不知道如何处理。

要比较类型,您需要获取变量的类型,并将其与另一种类型进行比较。大致如下:

public static void Main()
{
    double num1 = 0;

    if(num1.GetType() == typeof(double)) 
    {
        Console.WriteLine("num1 is a double");
    }
    else
    {
        Console.WriteLine("num1 is not a double, it is a " + num1.GetType().FullName);  
    }


    int num2 = 0;

    if(num2.GetType() == typeof(double)) 
    {
        Console.WriteLine("num2 is a double");
    }
    else
    {
        Console.WriteLine("num2 is not a double, it is a " + num2.GetType().FullName);  
    }
}

结果输出:

num1 是双精度
num2 不是双精度,它是 System.Int32

Link to example

除了num1.GetType() == typeof(double),您还可以使用num1 is double。这是更简洁的代码,但它们的工作方式并不总是完全相同。对于double,它们是等价的,但如果您选择的类型可以派生,则不是(is 将在派生类型上产生true,但GetType() == typeof() 将产生false

但是,正如我之前提到的,检查您已明确定义其类型的变量的类型是没有意义的。类型检查不是很常见,特别是因为您经常声明类型(隐式或显式,编译器相同)。在处理派生类时更有意义,当您的变量是基类型并且您对是否使用特定的派生类型感兴趣时。

【讨论】:

  • 比较苹果和梨 - 比较苹果和水果 可能更贴切 - 将水果的实例与一般情况混淆水果的种类。
  • @BriansaysReinstateMonica:我真的同意你的更正,但它的正确性(或者更确切地说,为什么它指出了一个不正确的前提)对于初学者来说非常不清楚。 “苹果是水果吗”是正确的英语,本质上是 OP 试图找出的内容 - 它并没有像 OP 所怀疑的那样完全翻译成代码..
  • 完全没有问题,我同意这是一个棘手的问题。这个成语让我觉得有点好笑。
猜你喜欢
  • 2012-10-20
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
  • 1970-01-01
  • 2019-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多