我有这段代码消耗了太多的垂直空间而且它太冗长了。
if (property == null)
{
throw new XamlParseException($"Cannot find a property named \"{Name}\" in the type {underlyingType}");
}
是否有等效的方法,但更清晰,更紧凑?
形状的东西
ThrowIfNull<XamlParseException>(message)
答案 0 :(得分:2)
您始终可以创建扩展方法:
public static class ClassContracts {
public static void ThrowIfNull(this Object item)
{
if(item == null) throw new XamlParseException("Your message here", null);
}
}
通过这种方式,您占用的空间更少,这就是您所说的,并且您可以在需要时反复使用代码。我有一个这样的库用于测试空值等。我喜欢这样做,而不是Code Contracts,因为这需要二进制重写器,并且根据你的环境,你的构建系统(如果你有的话)可能不支持这样做。最终,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"));
}
答案 1 :(得分:0)
我不知道这样的方法,但你可以自己创建它,或者只是将消息移动到资源文件/内部常量(当然,如果它占用的空间是这样的话)。
扩展方法也是可行的选择,如果它可以接受(我的意思是PropertyInfo
或任何其他类型的扩展名。)