在不添加样板的情况下执行运行时检查的更好(清晰)方法?

Better (legible) way to perform runtime check without adding boilerplate?

我有这段代码消耗了太多的垂直space而且太冗长了。

    if (property == null)
    {
        throw new XamlParseException($"Cannot find a property named \"{Name}\" in the type {underlyingType}");
    }

有没有等效的方法,但是更清晰和紧凑

形状为 ThrowIfNull<XamlParseException>(message)

您始终可以创建扩展方法:

public static class ClassContracts {
   public static void ThrowIfNull(this Object item)
   {
       if(item == null) throw new XamlParseException("Your message here", null); 
   }

}

这样您就可以减少 space 的用量,这就是您所说的,并且您可以在需要时反复使用该代码。我有一个用于测试 null 等的库。我喜欢通过 Code Contracts 这样做,因为这需要二进制重写器,并且根据您的环境,您的构建系统(如果有的话)可能不支持这样做。最终,代码契约做的不仅仅是这个,但在紧要关头,它提供了一种快速简洁的方法来检查代码中的空值和其他条件,因为您可以创建其他条件,例如:

 public static void CheckForCondition <T>(this T item, Predicate<T> p, Func<Your_Exception_Type> createException) 
{
    if(p(item)){throw createException();}
}

有了这个基本方法,您就可以创建其他方法并创建重载,等等。已经创建了谓词或异常方法。

    public static void CheckForNullCondition<T>(this T item)
    {
        item.CheckForCondition(x => x == null,
            () => new Exception("Item is null"));
    }

Extension Methods

我不知道这种方法,但你可以自己创建它,也可以将消息移动到资源 file/internal 常量(当然,如果 space 是这样的话) .

如果您可以接受,扩展方法也是可行的选择(我的意思是对 PropertyInfo 或任何其他类型进行这种扩展)。