反转?操作者

时间:2010-04-13 05:37:03

标签: c#

是否有可能在C#中做这样的事情?

logger != null ? logger.Log(message) : ; // do nothing if null

logger !?? logger.Log(message); // do only if not null

5 个答案:

答案 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方法:)