public static void ShouldNotBeNull<T>(this T actualValue)
{
Assert.IsFalse(actualValue == null, "Object is null, and should not be null.") ;
}
我想在测试中的错误字符串中提供一个变量名。我有这个作为扩展方法。是否有可能获得传入的变量的真实参数名称?是否可以使用反射来获取通过此函数传递给函数的变量的名称?
public static void ShouldNotBeNull<T>(this T actualValue)
{
Assert.IsFalse(actualValue == null, "Object is null, and should not be null.") ;
}
我想在测试中的错误字符串中提供一个变量名。我有这个作为扩展方法。是否有可能获得传入的变量的真实参数名称?是否可以使用反射来获取通过此函数传递给函数的变量的名称?
我有一个选项written up before正在使用匿名类型。例如,你必须:
public void Foo(string x, string y, string z) // x and z must not be null
{
new { x, z }.AssertNoNullElements();
}
与通用AssertNotNull
方法执行一些反射等一次,并缓存性能,以实现业绩尽可能少的访问为代表。
这不是我通常会推荐的。它不是可以重构的,它会在每次调用时创建一个新对象,并且通常会滥用匿名类型。诚然,如果这是只做检查,性能方面是不是那么糟糕......
考虑
public static void ShouldNotBeNull<T>(this T actualValue, string variableName)
{
Assert.IsFalse(actualValue == null, variableName + " is null, and should not be null.") ;
}
真的吗?你不相信调用者足以传递一个非空值,但你相信他们足以传递相同值的正确变量名称? –
那么,写'obj.ShouldNotBeNull(var,“var”);'应该很简单。 –
它看起来很傻,容易出错,而且真的不比调用者自己检查null本身简单 –
没有,呼叫者很可能甚至没有分配给一个变量名“这个参数或任何其他参数
以及如果传入表达式该怎么办?例如:'obj1.providevalue(obj2,obj3.i + obj4.j).ShouldNotBeNull()'。 – Vlad
你可以使用'Assert.IsNotNull(actualValue)'使你的代码读得更好一点。 – dlev
我真的只是在这里与@ dlev的建议去... –