#34的语法糖;如果此参数为null,则自动返回null"

时间:2014-11-07 16:34:22

标签: c# syntactic-sugar

当特定参数为null时,是否存在返回null的语法糖?这是否存在?

public DataObj GetMyData(DataSource source?null, User currentUser?null, string path) {
    // Code starts here. source and currentUser are not null.
}

或者

public DataObj GetMyData(DataSource source!, User currentUser!, string path) {
    // Code starts here. source and currentUser are not null.
}

因此,如果source或currentUser为null而不必执行该方法,则上面将返回null,但如果只有路径为null,它将执行。

public DataObj GetMyData(DataSource source, User currentUser, string path) {
    if (source == null || currentUser == null)
    { 
        return null;
    }
    // The rest of your code here
}

你也可以使用ArgumentNullExceptions,但是你在别处创建了额外的异常处理工作,特别是如果null参数没问题,但你没有从中获取值。

3 个答案:

答案 0 :(得分:3)

C#6提议转变null propagation operator ?

double? minPrice = null;
if (product != null
    && product.PriceBreaks != null
    && product.PriceBreaks[0] != null)
{
  minPrice = product.PriceBreaks[0].Price;
}

成:

var minPrice = product?.PriceBreaks?[0]?.Price;

答案 1 :(得分:0)

不,没有语法糖可以返回null。

我认为最接近的是对可空值的操作:

int? Add(int? l, int? r)
{
    return l + r;  
}

会给你" HasValue = false"如果任一操作数没有值。

您可能还想阅读"也许monad"这与你正在寻找的非常接近 - 即Marvels of Monads试图在C#中解释一个(可空值是一个例子,但仅适用于值类型)。

答案 2 :(得分:0)

如果你发现自己做了几次,那么把它放到一个通用的方法中是有意义的。该方法可以进行检查,它将使用一个函数,在检查参数的空值后执行实际操作。

public T OperateIfNotNull<T, V1, V2>(V1 arg1, V2 arg2, string path, Func<V1, V2, string, T> operation) where T : class
{
    if ((arg1 == null) || (arg2 == null) || string.IsNullOrWhiteSpace(path))
        return null;

    return operation(arg1, arg2, path);

}