2011-07-14 121 views
1
public static void ShouldNotBeNull<T>(this T actualValue) 
{ 
    Assert.IsFalse(actualValue == null, "Object is null, and should not be null.") ; 
} 

我想在测试中的错误字符串中提供一个变量名。我有这个作为扩展方法。是否有可能获得传入的变量的真实参数名称?是否可以使用反射来获取通过此函数传递给函数的变量的名称?

+0

以及如果传入表达式该怎么办?例如:'obj1.providevalue(obj2,obj3.i + obj4.j).ShouldNotBeNull()'。 – Vlad

+3

你可以使用'Assert.IsNotNull(actualValue)'使你的代码读得更好一点。 – dlev

+0

我真的只是在这里与@ dlev的建议去... –

回答

1

我有一个选项written up before正在使用匿名类型。例如,你必须:

public void Foo(string x, string y, string z) // x and z must not be null 
{ 
    new { x, z }.AssertNoNullElements(); 
} 

与通用AssertNotNull方法执行一些反射等一次,并缓存性能,以实现业绩尽可能少的访问为代表。

这不是我通常会推荐的。它不是可以重构的,它会在每次调用时创建一个新对象,并且通常会滥用匿名类型。诚然,如果这是做检查,性能方面是不是那么糟糕......

0

考虑

public static void ShouldNotBeNull<T>(this T actualValue, string variableName) 
{ 
    Assert.IsFalse(actualValue == null, variableName + " is null, and should not be null.") ; 
} 
+0

真的吗?你不相信调用者足以传递一个非空值,但你相信他们足以传递相同值的正确变量名称? –

+0

那么,写'obj.ShouldNotBeNull(var,“var”);'应该很简单。 –

+0

它看起来很傻,容易出错,而且真的不比调用者自己检查null本身简单 –

-1

没有,呼叫者很可能甚至没有分配给一个变量名“这个参数或任何其他参数

相关问题