帮助c#lambda表达式

时间:2011-07-19 20:20:27

标签: c# .net lambda

我正在为这一个提取所有高级功能,但是没有使用泛型或lambda表达式:

以下是我想要创建的方法的示例用法:

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

据我所知,但我不知道如何处理这个表达式对象。

[enter image description here 1

3 个答案:

答案 0 :(得分:1)

这是你想要的事吗?

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);
    }
}

答案 1 :(得分:0)

您尝试做的事情听起来像Maybe

项目说明:

可能或者IfNotNull在C#中使用lambdas作为深层表达式

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

更新:有关如何最好地在this question完成此类事情的讨论。

答案 2 :(得分:0)

这就是我追求的目标:

    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;
    }