0

我有这个签名的 ac# 函数:

public XmlNode getName(int a, double b){}

问题是 a 变量并不总是有效的 int (用户可以将其保留为 null 或空格。在这些情况下,函数失败(不足为奇)。如何在开始之前验证 int 是否为 int功能?


编辑:

该函数是 web 服务(asmx 文件)中的 WEBMETHOD,这就是为什么用户可以在 a.xml 中键入任何值的原因。问题是当有人输入字符串而不是 int 时 web 服务崩溃,这就是我想要避免的。

4

3 回答 3

1

目前,您需要将有效的 int 传递给您的方法。例如,您不能这样称呼它:

getName("", 3);

这会给你一个编译错误,因为第一个参数不是 type int

所以你有两个选择:

  1. 让调用者将用户输入转换为int.
  2. 调整您的方法签名以接受string,objectNullable<int>.

Nullable<int>允许您的方法的调用者通过null. 您可以使用a.HasValue来检查用户是否通过null或有效的int. (MSDN 文档

要在 .NET Framework 中转换值,您还有其他三个选项:

int.解析

此方法接受一个字符串参数并尝试将其转换为int. 如果转换失败或stringis null,则会引发异常。

int.TryParse

此方法接受一个string和一个输出参数并尝试转换。如果失败,则不会抛出异常。相反,该方法返回下降,您可以决定要做什么。

转换.ToInt32

此方法采用对象类型的参数。它不会抛出 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
}
于 2013-03-04T08:32:38.780 回答
1

用户绝不会将空格或 null 传递给该函数。你是。你给了它一个 int 的签名,如果你试图用可能为 null 或空格的东西来调用它,它就不会编译。

如果你的意思是你传递给它的输入是一个字符串,但它只对 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;
   }  
}
于 2013-03-04T08:35:51.227 回答
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
于 2013-03-04T08:27:36.650 回答