Преобразование блоков ObjC в C # Lambdas

1

Мне нужна помощь в преобразовании блока Objective-C в С#.

Вот источник ObjC:

NSDate* addYear = [_calendar dateByAddingComponents:((^{
        NSDateComponents* components = [NSDateComponents new];
        components.month = 12;
        return components;
    })()) toDate:now options:0];

Теперь я попробовал следующее в С#:

NSDate date = _calendar.DateByAddingComponents((() => {
            NSDateComponents components = new NSDateComponents();
            components.Month = 12;
            return components;
        })(), now, NSCalendarOptions.None);

На что я получаю следующую ошибку компилятора: Expression denotes a 'anonymous method' where a 'method group' was expected.

Удаление круглых скобок вокруг лямбда-уроков Cannot convert 'lambda expression' to non-delegate type 'MonoTouch.Foundation.NSDateComponents'.

Каков правильный синтаксис С#? Мне нужно сохранить закрытие, поскольку в базе кода есть намного больше, чем я переношу.

Теги:
xamarin.ios
mono

1 ответ

4
Лучший ответ

Это должно работать:

        var date = calendar.DateByAddingComponents (
            new NSDateComponents () 
            {
                Month = 12
            },
            NSDate.Now,
            NSCalendarOptions.None);

EDIT: вам может понадобиться Func:

        Func<NSDateComponents> func = () => new NSDateComponents () { Month = 12 };

        date = calendar.DateByAddingComponents (func (), NSDate.Now, NSCalendarOptions.None);

В рамках метода:

        date = calendar.DateByAddingComponents (
            (new Func<NSDateComponents>(()=> new NSDateComponents () { Month = 12 }))(),
            NSDate.Now,
            NSCalendarOptions.None);
  • 0
    Спасибо, но закрытие является намеренным от оригинальных разработчиков из того, что я могу сказать. И в источнике, который я портирую, есть несколько замыканий.
  • 0
    Хорошо. Я отредактировал ответ, надеюсь, это то, что вы ищете.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню