确定参数是否为数字

时间:2012-01-05 14:51:09

标签: c# variables arguments

在我的应用程序中,我有一个方法,它将三个数字作为参数。但是,该方法只能将数值作为参数,因此我需要检查参数是否为数字。我怎么能以一种简单而优雅的方式做到这一点?谢谢你提前

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

7 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

使用原型:

public Triangle(double a, double b, double c)

如果尝试将除double之外的任何内容传递给方法,编译器应该抛出错误。但是,如果您从键盘读取输入,比如字符串,并且您需要检查这些字符串是否为双精度数,则可以使用

double.TryParse(string, num);

答案 3 :(得分:0)

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

如果你有三个objects作为参数,你会尝试投射它们或检查它们的类型。

答案 4 :(得分:0)

使用IsNaN()(不是数字)。

if (double.IsNaN(a) || double.IsNaN(b) || double.IsNaN(c))
    throw new ArgumentException(...)

答案 5 :(得分:0)

如果你有必须转换为双打的字符串,你也可能有超载进行测试和转换:

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");
    }
}  

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

答案 6 :(得分:-1)

尝试使用AJAX过滤的文本框扩展程序并将其配置为仅接受Numbers并且无需任何编码即可解决您的问题。