【问题标题】:How to check if given parameter is int or char in C#?如何在 C# 中检查给定参数是 int 还是 char?
【发布时间】:2018-06-20 08:51:49
【问题描述】:

我有一个简单的方法,它需要一个整数值作为参数:

 public const string IndexIsNotANumber = "The given index is not a number!";

    public Fibonacci() { }

    public int GetNumberByIndex(int index)
    {
        try
        {
            Convert.ToInt32(index);
        }
        catch
        {
            throw new FormatException(IndexIsNotANumber);
        }
    }

以及适当的测试:

 [TestMethod]
    public void PassChar()
    {
        //arrange
        char index = 'A';
        Fibonacci fibonacci = new Fibonacci();

        //act
        try
        {
            int b = fibonacci.GetNumberByIndex(index);
        }
        catch (FormatException e)
        {
            // assert  
            StringAssert.Contains(e.Message, Fibonacci.IndexIsNotANumber);
            return;
        }
        Assert.Fail("No exception was thrown.");
    }

问题是测试总是失败并出现“未引发异常”错误 那么如何确保给定的参数不是 char 呢?

【问题讨论】:

  • 是 convert.toInt32 正在转换 'A' 的 ascii 值
  • @shyam 我知道。这只是我尝试过的众多方法之一。

标签: c# types char int comparison


【解决方案1】:

由于 index 的类型已经是 int,因此代码永远不会抛出异常:
Convert.ToInt32(index); Convert.ToInt32(char) 用于获取 char 的 ASCII 码,因此您应该使用 int.Parse 代替。

试试这个:

public int GetNumberByIndex(char index)
{
    try
    {
        //Convert.ToInt32(index);
        int.Parse(index.ToString());
    }
    catch
    {
        throw new FormatException(IndexIsNotANumber);
    }
}

【讨论】:

  • 它将成功地将任何ascii char转换为int。
【解决方案2】:

所以我通过重载方法解决了这个问题:

  public int GetNumberByIndex(int index)
  {
      /**/
  }
  public int GetNumberByIndex(char index)
  {
      throw new FormatException(IndexIsNotANumber);
  }

这不是一个很好的例子,但据我所知,没有人知道更好的方法。

【讨论】:

    【解决方案3】:

    使用- int.TryParse(string s,Out)

    此方法将字符串转换为整数输出变量,如果解析成功则返回true, 否则为假。如果 string s 为 null,则 out 变量为 0 而不是 throw ArgumentNullException

    【讨论】:

    • 请举个小例子
    • 字符串输入 = "yourInput";整数结果; if (int.TryParse(input, out result)) { //你的代码,如果它是整数 }
    • 我应该如何使用它?我有整数作为参数,而不是字符串。
    • 天啊!有用!我刚刚将您的结果替换为索引,然后它开始工作!谢谢!
    • 不,抱歉,它不起作用。这段代码string input = "inputData"; if (!int.TryParse(input, out index)) { throw new FormatException(IndexIsNotANumber); }总是抛出错误,即使参数是int
    【解决方案4】:

    在 if 条件下使用 GetType() 函数。

    if(index.GetType()==typeof(int))
    {
     //Your Code
    }
    

    【讨论】:

      猜你喜欢
      • 2014-01-07
      • 2021-05-10
      • 2011-05-31
      • 2011-11-10
      • 2013-04-29
      • 1970-01-01
      • 1970-01-01
      • 2021-10-19
      相关资源
      最近更新 更多