在不添加样板的情况下执行运行时检查的更好(清晰)方法?
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"));
}
我不知道这种方法,但你可以自己创建它,也可以将消息移动到资源 file/internal 常量(当然,如果 space 是这样的话) .
如果您可以接受,扩展方法也是可行的选择(我的意思是对 PropertyInfo
或任何其他类型进行这种扩展)。
我有这段代码消耗了太多的垂直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"));
}
我不知道这种方法,但你可以自己创建它,也可以将消息移动到资源 file/internal 常量(当然,如果 space 是这样的话) .
如果您可以接受,扩展方法也是可行的选择(我的意思是对 PropertyInfo
或任何其他类型进行这种扩展)。