我尝试做的事情看起来像是
catch ( Exception e )
{
Type etype = e.GetType();
if (etype == ArgumentException.GetType())
{
Console.WriteLine("Invalid Arguments: {0}", e.Message);
}
else if (etype == ArgumentOutOfRangeException.GetType())
{
Console.WriteLine("Arguments Out of Range: {0}", e.Message);
}
// ...
}
我收到了错误
非静态字段,方法或者需要对象引用 property' System.Exception.GetType()'
这个错误在我的上下文中意味着什么?我的方法的根本缺陷是什么?
答案 0 :(得分:2)
为预期的异常类型设置单独的catch
块:
try
{
// do something
}
catch (ArgumentException e)
{
// respond to an ArgumentException
}
catch (ArgumentOutOfRangeException e)
{
// respond to an ArgumentOutOfRangeException
}
// ...
答案 1 :(得分:2)
您可以执行以下操作:
try {
...
}
catch (ArgumentOutOfRangeException e)
{
Console.WriteLine("Arguments Out of Range: {0}", e.Message);
}
catch (ArgumentException e)
{
Console.WriteLine("Invalid Arguments: {0}", e.Message);
}
并且在C#6.0中,您可以根据您设置的条件进一步指定要捕获的异常。例如:
// This will catch the exception only if the condition is true.
catch (ArgumentException e) when (e.ParamName == "myParam")
{
Console.WriteLine("Invalid Arguments: {0}", e.Message);
}
答案 2 :(得分:2)
你只是:
catch ( ArgumentException e )
{
// Handle ArgumentException
}
catch ( ArgumentOutOfRangeException e )
{
// Handle ArgumentOutOfRangeException
}
catch ( Exception e )
{
// Handle any other exception
}
答案 3 :(得分:1)
你做不到。
GetType仅用于实例化的异常对象。
你应该使用
catch (ArgumentOutOfRangeException e)
{
[...]
}
catch (ArgumentException e)
{
[...]
}
您应该始终catch
按顺序从更具体到更少。
答案 4 :(得分:1)
您只能在对象实例上调用GetType()
。如果你想保持你的风格(而不是单独的catch块,就像在其他答案中一样):
catch ( Exception e )
{
Type etype = e.GetType();
if (etype == typeof(ArgumentException))
{
Console.WriteLine("Invalid Arguments: {0}", e.Message);
}
else if (etype == typeof(ArgumentOutOfRangeException))
{
Console.WriteLine("Arguments Out of Range: {0}", e.Message);
}
// ...
}