开发者

Help with c# lambda expression

I'm pulling all of the advanced features together for this one, but haven't worked with generics or lambda expressions v开发者_运维百科ery much:

Here's example usage of the method I want to create:

MyClass mc = null;
int x = mc.TryGetOrDefault(z => z.This.That.TheOther); // z is a reference to mc
// the code has not failed at this point and the value of x is 0 (int's default)
// had mc and all of the properties expressed in the lambda expression been initialized
// x would be equal to mc.This.That.TheOther's value

Here's as far as I've gotten, but I'm not sure what to do with this expression object.

[

Help with c# lambda expression

1


Is this the sort of thing you're after?

public static TResult TryGetOrDefault<TSource, TResult>(this TSource obj, Func<TSource, TResult> expression)
{
    if (obj == null)
        return default(TResult);

    try
    {
        return expression(obj);
    }
    catch(NullReferenceException)
    {
        return default(TResult);
    }
}


What you are trying to do sounds like Maybe.

Project Description:

Maybe or IfNotNull using lambdas for deep expressions in C#

int? CityId= employee.Maybe(e=>e.Person.Address.City);

Update: There is more discussion about how best to accomplish this sort of thing at this question.


Here's what I was after:

    public static TResult TryGetOrDefault<TSource, TResult>(this TSource obj, Func<TSource, TResult> function, TResult defaultResult = default(TResult))
    {
        try
        {
            defaultResult = function(obj);
        }
        catch (NullReferenceException) { }
        return defaultResult;
    }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜