确定参数是否为数字
本文关键字:数字 是否 参数 | 更新日期: 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
上的公共常数,即双值边缘情况下的NaN
、PositiveInfinity
和NegativeInfinity
。
如果您想根据用户输入测试这些值是否真的是非数字的,那么您的参数应该键入为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过滤的文本框扩展程序,并将其配置为只接受数字,这样就可以在不进行任何编码的情况下解决问题。