我想寫一個輔助方法,它需要一個func和第二個參數T,並嘗試調用它。如果發生Null引用異常,則返回T(第二個參數)。如果成功,返回通過FUNC的結果,而不是這樣的:傳遞函數,可能是一個空引用異常作爲參數
tableRow[rowNum, fieldNamePos].Value != null ? tableRow[rowNum, fieldNamePos].Value.ToString() : "";
我可以寫
Helper.GetDefaultIfNull(tableRow[rowNum, fieldNamePos].Value.ToString,"")
我相信這是更簡潔,更少的代碼。下面是我在GetDefaultIfNull方法:
public T GetDefaultIfNull<T>(Func<T> funcToInvoke, T defaultValue)
{
T result;
try
{
result = stringFunc.Invoke();
}
catch (NullReferenceException)
{
result = defaultValue;
}
return result;
}
當我運行測試,這在非空引用傳遞時,卻傳遞一個空引用時正常工作,它拋出調用的方法,因此,當一個錯誤似乎在將它傳遞給方法時調用該函數?這裏是測試代碼:
[TestMethod]
public void NULL_EXCEPTION_return_default()
{
StringBuilder sb = null;
//Func<string> stringFunc = ;
var defaultValue = "";
var result = new Helper().GetDefaultIfNull(sb.ToString, defaultValue);
Assert.AreEqual(defaultValue, result);
}
有沒有辦法做到這一點?
你知道[''''操作符](http://msdn.microsoft.com/en-us/library/ms173224.aspx)嗎?如果我明白了,它基本上就是做你想達到的。 – aloisdg
是這樣嗎?(例外) { return T; }' 如果這就是你的意思,那麼每次我這樣做的時候就是8行代碼。 – MickJuice
我知道嗎?但是這涉及到一個調用這個對象的方法。我需要確保它在調用該對象的方法之前不爲null – MickJuice