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
,您可以使用(returnsbool
)或(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