Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我想在c#中用一个类而不是一个变量生成一个if语句_C# - Fatal编程技术网

我想在c#中用一个类而不是一个变量生成一个if语句

我想在c#中用一个类而不是一个变量生成一个if语句,c#,C#,我想写作 doublenum1; 如果(num1!=双精度) { Console.WriteLine(“无效运算符”); } 但我收到一条错误消息,上面写着“无效的表达式术语'double'” 如果num1不是double,我想让if语句写“Invalid operator”。 你的问题合乎语法,但不合逻辑 double num1; num1是一个double。它只能是double,因为您明确声明它是double if(num1 != double) 除了糟糕的语法之外,由于num1是

我想写作

doublenum1;
如果(num1!=双精度)
{
Console.WriteLine(“无效运算符”);
}
但我收到一条错误消息,上面写着“无效的表达式术语'double'” 如果num1不是double,我想让if语句写“Invalid operator”。

你的问题合乎语法,但不合逻辑

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

if(num1 != double) 
除了糟糕的语法之外,由于
num1
double
,因此完全不需要检查。这永远不可能是真的,所以没有必要检查它


语法 也就是说,您的
num1!=double
无效。您试图将变量的值与给定的变量类型进行比较。你在比较苹果和梨,编译器不知道如何处理

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

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

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


但是,正如我前面提到的,检查您显式定义了其类型的变量的类型毫无意义。类型检查不是很常见,因为您经常声明类型(隐式或显式地,对编译器来说都是一样的)。在处理派生类时,如果您的变量是基类型,并且您对某个特定的派生类型感兴趣,那么它就更有意义了。

您想做什么?请详细说明,这是没有道理的。如果条件要做什么,您希望
做什么?
num1
是双精度的。它只能是一个double。看起来您要找的是
if(num1.GetType()!=typeof(double))
。更多信息和。或者,您可以使用
is
运算符:
if(num1是double){}
如果num1不是double,我想让if语句写“Invalid operator”。
在什么情况下您认为
num1
不是double?比较苹果和梨,可能更容易说,比较苹果和水果——混淆水果的实例和一般类型的水果。@Briansays:我真的同意你的更正,但是初学者对它的正确性(或者更确切地说,为什么它指出了一个不正确的前提)很不清楚。“苹果是水果吗”是正确的英语,本质上是OP想要找出的东西——它只是没有像OP想象的那样翻译成字面意思的代码……一点问题都没有,我同意这是一个棘手的问题。这个成语让我觉得有点滑稽。