Помогите с лямбда-выражением c # - PullRequest
1 голос
/ 20 июля 2011

Я собираю все расширенные функции для этого, но не очень много работал с обобщениями или лямбда-выражениями:

Вот пример использования метода, который я хочу создать:

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 ]

1 голос
/ 20 июля 2011

Это то, что вам нужно?

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);
    }
}
0 голосов
/ 20 июля 2011

Вот то, что я был после:

    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 голосов
/ 20 июля 2011

То, что вы пытаетесь сделать, звучит как Возможно .

Описание проекта:

Возможно или IfNotNull с использованием лямбд для глубоких выражений в C #

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

Обновление : о том, как лучше всего выполнить эту задачу, можно узнать на этом вопросе .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...