是否有可能在C#中做这样的事情?
logger != null ? logger.Log(message) : ; // do nothing if null
或
logger !?? logger.Log(message); // do only if not null
答案 0 :(得分:8)
没有。您最接近的可能是通过空对象设计:
(logger ?? NullLogger.Instance).Log(message);
其中NullLogger.Instance是一个只删除其所有方法的Logger。 (当然,如果你需要默认行为来做某事而不是无操作,你可以用合适的Logger.Default代替NullLogger.Instance代替。)
答案 1 :(得分:7)
你想要太聪明......只需使用if
:
if(logged != null) logger.Log(message);
答案 2 :(得分:6)
:)
if (logger!=null) logger.Log(message);
不......不幸的是,这样的运营商不存在。
答案 3 :(得分:4)
或者,如果您想让您的同事感到惊讶,您可以使用扩展方法:
public static void Log(this Logger logger, string message)
{
if(logger != null)
logger.ReallyLog(message);
}
只是做
logger = null;
logger.Log("Hello world, not.");
答案 4 :(得分:2)
我正在寻找反向?运算符也是如此,因此我遇到了一个古老的问题,该问题今天可以通过{#3}}来解决,该问题在C#6中引入:
logger?.Log(message);
仅当Log
不为null时,这将调用logger
方法:)