确定参数是否为数字

本文关键字:数字 是否 参数 | 更新日期: 2023-09-27 18:19:43

在我的应用程序中,我有一个以三个数字为参数的方法。然而,该方法只能将数值作为参数,因此我需要检查参数是否为数字。我如何才能以一种简单且最好优雅的方式做到这一点?感谢提前

  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#是强类型的。因此,如果指定参数为数字,则无法使用非数字参数调用方法。

在当前的代码示例中,根据定义,这些值是"数字"的,即它们被键入为double。看看Double上的公共常数,即双值边缘情况下的NaNPositiveInfinityNegativeInfinity

如果您想根据用户输入测试这些值是否真的是非数字的,那么您的参数应该键入为string,并且您可以使用Double.TryParse(返回bool)或Double.Parse(抛出异常)来测试它们是否是数字的。

使用您的原型:

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

如果您试图向方法传递除double之外的任何内容,编译器应该抛出错误。然而,如果你从键盘上读取的输入是字符串,并且你需要检查这些字符串是否是双字符串,你可以使用

double.TryParse(string, num);

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

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

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

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

如果您有必须转换为doubles的字符串,那么您也可能有一个重载来进行测试和转换:

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

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

尝试使用AJAX过滤的文本框扩展程序,并将其配置为只接受数字,这样就可以在不进行任何编码的情况下解决问题。