我想在我的代码中加入一些错误处理。对于以下示例,我不知道该怎么做:
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
}
}
所以想法是,我需要检查
RawData
已经设置好了,然后在 GetMaxX()
中做剩下的事情方法。这是一个好习惯吗?在这种情况下你会怎么做?
最佳答案
这段代码有两个问题,
首先你要抛出一个异常,然后是一个 return - return 语句永远不会被命中,因为异常会停止执行该方法的其余部分,从而使 return 语句变得多余。
其次,返回类型为float时不能返回null;您必须将返回类型更改为浮点数? (见:nullable types)
所以,如果这是一个真正的错误案例,因为除了异常(exception)你无能为力:
public float GetMaxX()
{
if(RawData == null)
throw new NullReferenceException();
//DO other stuff to find max X
return MAX_X; //as float
}
或者,返回 null 并删除异常:
public float? GetMaxX()
{
if(RawData == null)
return null;
//DO other stuff to find max X
return MAX_X; //as float
}
就个人而言,如果
RawData
为 null 是一种永远不会发生的错误条件/异常情况,那么我会说抛出异常,如果在调用代码中抛出异常,则处理异常。另一种方法是强制初始化
RawData
。通过构造函数,使 RawData
私有(private)(或至少是二传手)并在那里抛出异常。让类中的任何其他逻辑清除任何异常抛出/空检查,因为它可以假设 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
}
}
关于c# - 如何为 'float method' 返回 null - 错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7964390/