Можно ли использовать отражение, чтобы получить имена переменных, передаваемых в функцию через это? - PullRequest
1 голос
/ 14 июля 2011
public static void ShouldNotBeNull<T>(this T actualValue)
{
    Assert.IsFalse(actualValue == null, "Object is null, and should not be null.") ;
}

Я хотел бы указать имя переменной в строке ошибки в моих тестах.У меня есть это как метод расширения.Можно ли получить реальное имя параметра передаваемой переменной?

Ответы [ 3 ]

1 голос
/ 14 июля 2011

Одна опция, которую я написал до , использует анонимные типы. Например, у вас будет:

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

с помощью общего метода AssertNotNull, который выполняет некоторое отражение и т. Д. Один раз и кэширует доступ к свойству как делегат, чтобы максимально снизить производительность.

Это не то, что я обычно рекомендую, хотя. Он не защищен от рефакторинга, он создает новый объект при каждом вызове и, как правило, представляет собой злоупотребление анонимными типами. По общему признанию, если это только для тестов, производительность не так плоха ...

0 голосов
/ 14 июля 2011

Нет, вызывающая сторона может даже не иметь имени переменной, назначенного параметру 'this' или любому другому параметру

0 голосов
/ 14 июля 2011

Рассмотрим

public static void ShouldNotBeNull<T>(this T actualValue, string variableName)
{
    Assert.IsFalse(actualValue == null, variableName + " is null, and should not be null.") ;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...