在C#中可以這樣做嗎?反向?運算符
logger != null ? logger.Log(message) : ; // do nothing if null
或
logger !?? logger.Log(message); // do only if not null
在C#中可以這樣做嗎?反向?運算符
logger != null ? logger.Log(message) : ; // do nothing if null
或
logger !?? logger.Log(message); // do only if not null
:)
if (logger!=null) logger.Log(message);
不......遺憾的是這樣的操作符不存在。
你想成爲太聰明......只需使用一個if
:
if(logged != null) logger.Log(message);
工作太多:) – 2010-04-13 05:43:37
號你能來最接近的可能是通過一個空對象設計:
(logger ?? NullLogger.Instance).Log(message);
哪裏NullLogger.Instance是一個記錄器,它只是沒有運行它的所有方法。 (當然,如果你需要默認行爲而不是沒有選擇的行爲,你可以用一個合適的Logger.Default或者其他的代替NullLogger.Instance來代替)。
或者,如果你喜歡令人驚訝同事,你可以使用一個擴展方法:
public static void Log(this Logger logger, string message)
{
if(logger != null)
logger.ReallyLog(message);
}
,只是做
logger = null;
logger.Log("Hello world, not.");
嘿,那很好。 – 2010-04-13 05:50:55
我認爲你的同事應該(正確地)在代碼審查中指導你做這樣的事情。 :) – 2010-04-13 05:57:08
這很好,但不起作用(至少當我嘗試它)。 Logger.Log方法優先於擴展方法,所以最終會出現NullReferenceException。當然你可以通過重命名擴展方法SafeLog或類似的東西來解決這個問題。 – itowlson 2010-04-13 05:59:38
*聯合國*幸運? – mpen 2010-04-13 06:10:58
是的。對於HeavyWave而言,這很不幸,因爲這正是他所期待的。 – 2010-04-13 07:02:43