我有一个带有此签名的c#函数:
public XmlNode getName(int a, double b){}
问题是a变量并不总是有效的int(用户可以将其保留为null或空格。在这些情况下,函数失败(不足为奇)。如何在\之前验证int为int功能的开始?
编辑:
该函数是webservice(asmx文件)中的WEBMETHOD,这就是用户可以在其中键入任何值的原因。问题是,当有人输入字符串而不是int时,webservice崩溃,这就是我想要避免的。
答案 0 :(得分:1)
目前,您需要将有效的int传递给您的方法。你不能这样称呼它:
getName("", 3);
这会给你一个编译错误,因为第一个参数不是int
类型。
所以你有两个选择:
int
。 string
,object
或Nullable<int>
类型。 Nullable<int>
允许您方法的调用者传递null
。您可以使用a.HasValue
检查用户是否通过了null
或有效的int
。 (MSDN Documentation)
要在.NET Framework中转换值,您还有其他三个选项:
此方法采用字符串参数并尝试将其转换为int
。如果转换失败或string
为null
,则会引发异常。
此方法采用string
和输出参数并尝试转换。如果失败,则不会抛出异常。相反,该方法会返回,您可以决定要做什么。
此方法采用object类型的参数。它不会抛出null但返回默认值(对于int,这是0)。除此之外,它在内部使用int.Parse。
在您的情况下,您可以执行以下操作:
public XmlNode getName(string a, double b)
{
if ( string.IsNullOrWhiteSpace(a))
{
// Handle null case
}
int result;
if (!int.TryParse(a, out result)
{
// handle invalid int case
}
// Use result to get your XmlNode
}
答案 1 :(得分:1)
用户无法将空格或null传递给该函数。你是。你给它一个int的签名,如果你尝试用coul dbe null或space的东西来调用它,它就不会编译。
如果你的意思是传递给它的输入是一个字符串,但它只对int有效。这两个输入你想要什么?也许它会返回null。如果不是,请责备我。
public XmlNode getName(String a, double b)
{
int someval;
if (int.TryParse(s, out someval))
{
// do whatever you were going to in here, but using someval not a
}
else
{
return null;
}
}
答案 2 :(得分:0)
您可以尝试将用户输入解析为int
。如果失败,请不要调用getName
函数。
var isAInt = "1";
var isNotAnInt = "f";
String nothing = null;
int tmp;
var res1 = Int32.TryParse(isAInt, out tmp); // true
var res2 = Int32.TryParse(isNotAnInt, out tmp); // false
var res3 = Int32.TryParse(nothing, out tmp); // false