簡體   English   中英

用value替換lambda表達式中的nullable參數

[英]Replace nullable parameter in lambda expression with value

是否可以用Expression<Func<TValue>>替換Expression<Func<Nullable<TValue>>>

其中value為Nullable<TValue>.GetValueOrDefault()

是否可以用Expression<Func<TValue>>替換Expression<Func<Nullable<TValue>>>

當然 - 這只是包裝lambda的最外層結果:

static void Main() {

    Expression<Func<int?>> x = () => 1, y = () => null;
    Expression<Func<int>> a = DeNullify(x), b = DeNullify(y);

    Console.WriteLine(x.Compile()()); // 1
    Console.WriteLine(y.Compile()()); // {blank; null}

    Console.WriteLine(a.Compile()()); // 1
    Console.WriteLine(b.Compile()()); // 0 
}
public static Expression<Func<TValue>> DeNullify<TValue>(
    Expression<Func<TValue?>> expression) where TValue : struct
{
    return Expression.Lambda<Func<TValue>>(
        Expression.Call(expression.Body, "GetValueOrDefault", null),
        expression.Parameters);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM