public static void ShouldNotBeNull<T>(this T actualValue)
{
Assert.IsFalse(actualValue == null, "Object is null, and should not be null.") ;
}
我想在测试的错误字符串中提供一个变量名。我有一个扩展方法。是否有可能获得正在传递的变量的真实参数名称?
我之前写过的一个选项是使用匿名类型。例如:
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.") ;
}
不,调用者甚至很可能没有为'this'参数或任何其他参数分配变量名