在不添加样板文件的情况下执行运行时检查的更好的(易读的)方法

本文关键字:更好 检查 易读 方法 运行时 情况下 添加 文件 执行 | 更新日期: 2023-09-27 18:09:51

我的这段代码占用了太多的垂直空间,而且太啰嗦了。

    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); 
   }
}

这样你就可以使用更少的空间,这就是你所说的,你可以在需要的时候反复使用代码。我有这些库的测试为空等。我喜欢这样做,而不是代码契约,因为这需要二进制重写器,并且取决于您的环境,您的构建系统(如果有的话)可能不支持这样做。最终,代码契约所做的不仅仅是这些,但在必要时,它提供了一种快速而简洁的方法来检查代码中的空值和其他条件,因为您可以创建其他条件,如:

 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"));
    }

扩展方法

我不知道这种方法,但你可以自己创建它,或者只是将消息移动到资源文件/内部常量(当然,如果它占用的空间是这样的话)。

如果您可以接受,

扩展方法也是可行的选择(我的意思是为PropertyInfo或任何其他类型提供此类扩展)。