如何在C#中检查给定参数是int还是char?

时间:2018-01-11 05:01:48

标签: c# types char int comparison

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

 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.");
    }

问题是测试始终失败,并且#34;没有抛出异常"错误 那么如何确保给定的参数不是char?

4 个答案:

答案 0 :(得分:0)

使用带条件的GetType()函数。

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

由于索引的类型已经是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);
    }
}

答案 3 :(得分:0)

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

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

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