是否可以使用反射来获取通过this传递给函数的变量名称?


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'参数或任何其他参数分配变量名

相关内容

  • 没有找到相关文章

最新更新