【发布时间】:2016-02-09 09:33:39
【问题描述】:
我建立了一个简单的ArgumentValidator 类来简化任何给定方法中的参数前提条件。他们中的大多数是null 或边界检查,经过几次之后就会变得非常乏味
if (arg == null ) throw new ArgumentNullException(nameof(arg));
所以我想出了以下设置:
public static class ArgumentValidator
{
public interface IArgument<T>
{
string ParamName { get; }
T Value { get; }
}
private class Argument<T>: IArgument<T>
{
public Argument(T argument, string paramName)
{
ParamName = paramName;
Value = argument;
}
public string ParamName { get; }
public T Value { get; }
}
public static IArgument<T> Validate<T>(this T argument, string paramName = null)
{
return new Argument<T>(argument, paramName ?? string.Empty);
}
public static IArgument<T> IsNotNull<T>(this IArgument<T> o)
{
if (ReferenceEquals(o.Value, null))
throw new ArgumentNullException(o.ParamName);
return o;
}
public static IArgument<T> IsSmallerThan<T, Q>(this IArgument<T> o, Q upperBound) where T : IComparable<Q> { ... }
//etc.
}
我可以通过以下方式使用它:
public Bar Foo(object flob)
{
flob.Validate(nameof(flob)).IsNotNull().IsSmallerThan(flob.MaxValue);
}
理想情况下,我希望在 Validate 通话中摆脱 nameof(flob) 并最终完全摆脱 Validate; Validate 的唯一目的是避免每次检查都必须通过 nameof(...)。
有没有办法在Validate() 方法中获取名称flob?
【问题讨论】:
标签: c#