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的建議去... –