我有一个简单的方法,它需要一个整数值作为参数:
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?
答案 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);
}
这不是一个好例子,但正如我所见,没有人知道更好的方法。