我今天讨论了关于重构此问题的讨论(#1)

public void MyFunc(object myArgument)
{
    if(myArgument == null)
        throw new ArgumentNullException("myArgument");
....

与此(#2)
//inside a shared assembly in a class called Guard
public static void AgainstArgumentNull(object obj, string message)
{
    if (obj == null)
        throw new ArgumentNullException(message);
}

public void MyFunc(object myArgument)
{
    Guard.AgainstArgumentNull(myArgument, "myArgument");
....

我的直觉是,由于以下原因,#1更好:
  • #1比#2更简单,因为它不需要Util库,只需要基本的C#知识
  • #1不会删除重新共享传递给ArgumentNullException构造函数的字符串的重命名功能。
  • #2将增加代码的依赖性(必须有权访问包含该dll的dll)
  • #2的堆栈跟踪将与#1
  • 的堆栈跟踪不同

    我的问题是:
    我的直觉正确吗?
    在某些情况下,我们从另一个程序集引发异常的事实不会成为麻烦吗?

    最佳答案

    对于这种特殊情况,您无论如何都不应使用Guard。您应该使用代码契约(Contract)。

    Contract.Requires(myArgument != null);
    

    关于c# - 在C#中引发异常,守护,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6819868/

    10-10 12:34