c# - 如何为 'float method' 返回 null - 错误处理

标签 c# exception exception-handling error-handling

我想在我的代码中加入一些错误处理。对于以下示例,我不知道该怎么做:

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/

相关文章:

java - 与 Android 中的 e.printStackTrace() 混淆

c# - 使用 Watin 选择一个选项

java - 方法调用 : Collections. emptyList() 在不同情况下显示不同的行为?

java - Go 的等价于 'throws' 的子句是什么?

java - 不知道发生异常时如何转发404页面

java - JerseyClient 不会针对 4xx 和 5xx 响应引发异常

c++ - 用于在编译前检测 C++ 代码中未捕获异常的静态代码分析工具?

C#计算器指数函数。如何?

c# - EF 4.3.1 在 LinqToEntities 查询中包含继承的导航属性

javascript - 通过 while 循环加载 javascript 时 Web 浏览器没有响应