Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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# 确定参数是否为数字_C#_Variables_Arguments - Fatal编程技术网

C# 确定参数是否为数字

C# 确定参数是否为数字,c#,variables,arguments,C#,Variables,Arguments,在我的应用程序中,我有一个将三个数字作为参数的方法。但是,该方法只能将数值作为参数,因此我需要检查参数是否为数值。我怎样才能以一种简单且最好是优雅的方式做到这一点?谢谢是预付款 public Triangle(double a, double b, double c) { if ((a != ?) || (b != ?) || (c != ?)){ throw new ArgumentException("Not a number") }

在我的应用程序中,我有一个将三个数字作为参数的方法。但是,该方法只能将数值作为参数,因此我需要检查参数是否为数值。我怎样才能以一种简单且最好是优雅的方式做到这一点?谢谢是预付款

  public Triangle(double a, double b, double c) {
      if ((a != ?) || (b != ?) || (c != ?)){
            throw new ArgumentException("Not a number")
      }   
    sides = new double[] { a, b, c };
  } 

C#是强类型的。因此,如果指定参数为数字,则无法使用非数字参数调用方法。

C#是强类型的。因此,如果指定参数是数字的,则无法使用非数字参数调用方法。

在当前代码示例中,根据定义,这些值是“数字”的,它们被键入为
double
。请查看上的公共常量,即,和双值的边缘情况


如果要根据用户输入测试值是否实际上是非数字的,则应将参数键入
string
,您可以使用(returns
bool
)或(throws exception)来测试它们是否是数字的。

在当前代码示例中,值是“数字的”根据定义,它们被键入为
double
。请查看上的公共常量,即,和双值的边缘情况

如果要根据用户输入测试值是否实际上是非数字的,则应将参数键入为
string
,您可以使用(返回
bool
)或(抛出异常)来测试它们是否是数字。

因为C是强类型,所以双精度始终是数字值。你不需要检查它是否真的是一个数字,因为相反的情况永远不会发生

如果有三个
对象作为参数,您可以尝试强制转换它们或检查它们的类型。

由于C#是强类型的,所以double始终是一个数值。你不需要检查它是否真的是一个数字,因为相反的情况永远不会发生

如果有三个
对象作为参数,您将尝试强制转换它们或检查它们的类型。

使用
IsNaN()
(不是数字)

使用
IsNaN()
(不是数字)

使用您的原型:

public Triangle(double a, double b, double c)
如果试图向方法传递double以外的任何内容,编译器应该抛出错误。但是,如果您将键盘输入读取为字符串,并且需要检查这些字符串是否为双精度字符串,则可以使用

double.TryParse(string, num);
使用您的原型:

public Triangle(double a, double b, double c)
如果试图向方法传递double以外的任何内容,编译器应该抛出错误。但是,如果您将键盘输入读取为字符串,并且需要检查这些字符串是否为双精度字符串,则可以使用

double.TryParse(string, num);

尝试使用AJAX过滤的textbox extender,并将其配置为只接受数字,这样就不需要任何编码就能解决问题

尝试使用AJAX过滤的textbox extender,并将其配置为只接受数字,这样就不需要任何编码就能解决问题

如果您有必须转换为双精度的字符串,您还可以让重载执行测试和转换:

public Triangle(double a, double b, double c) {  
    sides = new double[] { a, b, c };
}  

public Triangle(string a, string b, string c) {
    double aa, bb, cc;
    if (double.TryParse(a, out aa) && double.TryParse(b, out bb) && double.TryParse(c, out cc)) {  
        sides = new double[] { aa, bb, cc };
    } else {
        throw new ArgumentException("Not a number");
    }
}  

但是,编译器永远不会允许您将字符串分配给双精度变量或方法参数。

如果您有必须转换为双精度的字符串,您还可能有一个重载来执行测试和转换:

public Triangle(double a, double b, double c) {  
    sides = new double[] { a, b, c };
}  

public Triangle(string a, string b, string c) {
    double aa, bb, cc;
    if (double.TryParse(a, out aa) && double.TryParse(b, out bb) && double.TryParse(c, out cc)) {  
        sides = new double[] { aa, bb, cc };
    } else {
        throw new ArgumentException("Not a number");
    }
}  


但是,编译器永远不会允许您将字符串指定给双精度变量或方法参数。

您将双精度作为参数传入,它们怎么可能不是数字?在C#中键入为双精度的参数怎么可能不是数字?你确定你的意思不是数字必须是正数,或者它们必须满足三角形不等式吗?喜剧选项:引用vb.net汇编,并调用IsNumeric:你将双精度作为参数传递,它们怎么可能不是数字?在C#中键入为双精度的参数怎么可能不是数字?你确定你的意思不是数字必须是正数,或者它们必须满足三角形不等式吗?喜剧选项:引用vb.net汇编,并调用IsNumeric:ok,因此,如果参数不是数值的,我想我不能在方法内部抛出异常?编译器甚至不允许使用非数值参数调用方法,因此您无法检查非数值参数,因此尝试这样做是徒劳的。如果参数不是数值的,它不应该编译。好的,因此,如果参数不是数值的,我想我不能在方法内部抛出异常?编译器甚至不允许使用非数值参数调用方法,因此无法检查非数值参数,因此,尝试这样做是徒劳的。如果参数不是数字,它就不应该编译。+1用于提及这些边界情况,因为可以证明NaN(不是数字)是“非数字”。请注意,您不能直接与NaN进行比较(与NaN的所有比较都返回false),而必须使用
double.IsNaN
+1检查这一点,以提及这些边界情况,因为可以确定NaN(不是数字)为“非数字”。请注意,您不能直接与NaN进行比较(所有与NaN的比较都返回false),而是必须使用
double.IsNaN
进行检查。IsNaN不能用于计算恰好是非数字的“正常”参数。只有在尝试某些结果在数学上未定义的操作(例如除以零)时,此值才会计算为true。但是OP想要的是确保他的方法是用数值参数而不是字符串来调用的。@Roy Dictus:我在最初的问题中没有看到任何关于测试字符串的内容。事实上,使用强类型的
double
参数可以防止这种情况。IsNaN不能用于计算恰好是非数字的“正常”参数。只有在尝试某些结果在数学上未定义的操作时,此值才会计算为true