Sae*_*ani 1 c# error-handling exception-handling exception
我想在我的代码中加入一些错误处理.我无法弄清楚如何做以下示例:
public class DataPoints
{
public PointF[] RawData {get; set;} //raw measurement pairs
public float xMax; //max value on X axis
public float yMax; //max value on Y axis
public float GetMaxX()
{
if(RawData == null)
{
throw new NullReferenceException();
return null; //THIS does not compile! I want to exit the method here
}
//DO other stuff to find max X
return MAX_X; //as float
}
}
Run Code Online (Sandbox Code Playgroud)
所以我的想法是,我需要检查是否RawData
已经设置然后在GetMaxX()
方法中执行其余的操作.这是一个很好的做法吗?在这种情况下你会做什么?
这段代码有两个问题,
首先,你抛出异常,然后返回 - 返回语句将永远不会被命中,因为异常将停止执行方法的其余部分,使得return语句变得多余.
其次,当返回类型为float时,不能返回null; 你必须改变返回类型是浮动的吗?(参见:可空类型)
所以要么,如果它是一个真正的错误案例,因为没有什么可以做的只是例外:
public float GetMaxX()
{
if(RawData == null)
throw new NullReferenceException();
//DO other stuff to find max X
return MAX_X; //as float
}
Run Code Online (Sandbox Code Playgroud)
或者,返回null并删除异常:
public float? GetMaxX()
{
if(RawData == null)
return null;
//DO other stuff to find max X
return MAX_X; //as float
}
Run Code Online (Sandbox Code Playgroud)
就个人而言,如果RawData
为null是一个错误条件/异常情况应该永远不会发生,那么我会说抛出异常,并处理异常,如果抛出调用代码.
另一种方法是强制RawData
通过构造函数初始化,使RawData
私有(或至少是setter)并在那里抛出异常.让类中的任何其他逻辑清除抛出/空检查的任何异常,因为它可以假设RawData
先前已经设置过.
导致的一些事情:
public class DataPoints
{
private readonly PointF[] rawData; //raw measurement pairs
public float xMax; //max value on X axis
public float yMax; //max value on Y axis
public DataPoints(PointF[] rawData)
{
if (rawData == null)
throw new ArgumentNullException("rawData");
this.rawData = rawData;
}
public float GetMaxX()
{
//DO other stuff to find max X
return MAX_X; //as float
}
}
Run Code Online (Sandbox Code Playgroud)