c# - 当方法尝试使用可以为空的字段时抛出哪个异常?

标签 c# .net exception null

<分区>

我实际上从事框架开发,这意味着需要非常强大的编码方法。

我面临一个问题,我不知道我需要抛出哪个 System.Exception 派生类。基本上情况是当我有一个类,其中的字段可以由构造函数选择性地初始化,并且有使用这些字段的方法。如果用户没有初始化这些字段,我必须抛出哪个异常? (这意味着它们为空)

这是一个例子:

public class MyConnection
{
    private Uri endpointUri;

    public Uri EndpointUri
    {
        get
        {
            return this.endpointUri;
        }

        set
        {
            this.endpointUri = value;
        }
    }

    public MyConnection()
    {
    }

    public MyConnection(Uri endpointUri)
    {
        this.endpointUri = endpointUri;
    }

    public FileStream GetFile()
    {
        if (this.endpointUri != null)
        {
            // My doer methods
        }
        else
        {
            throw new TheExceptionINeedToThrow("endpointUri", ...);
        }                
    }
}

请注意,我一直在阅读关于异常处理和抛出的整个 "Framework Design Guidelines" 章节,但我没有找到任何适合这种情况的解决方案。或者也许我误解了什么......

感谢您的帮助。

编辑:关于我的问题,我提供一个空的构造函数这一事实似乎有点令人困惑,但这完全是自愿的。在某些必须符合一系列不同状态且不能在多个对象中复制的对象中,它有时很有用。

最佳答案

InvalidOperationException :

The exception that is thrown when a method call is invalid for the object's current state.

请注意,空引用没有被传递到方法中——当方法被调用时它已经存在了——所以无效的是对象的当前状态,而不是参数。

但是,最好防止以这种方式创建对象,如果可能的话 - 它是一个可写属性吗?您是否想要一个确实具有空端点 URI 的实例?

关于c# - 当方法尝试使用可以为空的字段时抛出哪个异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1903105/

相关文章:

C# XNA 在构造函数中通过引用类传递

c# - 获取 SortedDictionary 的倒数第二个元素

c# - 如何复制由 AutoFilter() 方法过滤的行

.net - 使用 Thread.Sleep 对时间间隔操作进行单元测试是否不好?

java - 为什么对于给定的类不能同时使用 extends 和 throws

java - 在 Java 中创建日志记录或异常消息的最佳实践

java - ArrayIndexOutOfBounds 抛出异常

c# - 将 Powershell 命令添加到管道

c# - 模型无效时不显示 MVC 客户端验证摘要

c# - 使用命名参数动态调用方法