在我的应用程序中,我有一个方法,它将三个数字作为参数。但是,该方法只能将数值作为参数,因此我需要检查参数是否为数字。我怎么能以一种简单而优雅的方式做到这一点?谢谢你提前
public Triangle(double a, double b, double c) {
if ((a != ?) || (b != ?) || (c != ?)){
throw new ArgumentException("Not a number")
}
sides = new double[] { a, b, c };
}
答案 0 :(得分:5)
C#是强类型的。因此,如果您指定参数是数字,则无法使用非数字参数调用方法。
答案 1 :(得分:1)
在您当前的代码示例中,根据定义,值是“数字”,它们被键入为double
。请查看Double
上的公共常量,即NaN
,PositiveInfinity
和NegativeInfinity
,了解双值的边缘情况。
如果要根据用户输入测试值是否实际上是非数字,则应将参数键入为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并且无需任何编码即可解决您的问题。