gpt4 book ai didi

c# - 将 ObjC block 转换为 C# Lambda

转载 作者:太空宇宙 更新时间:2023-11-03 21:31:28 25 4
gpt4 key购买 nike

我需要一些帮助将 Objective-C block 转换为 C#。

这是 ObjC 的源代码:

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

现在我在 C# 中尝试了以下操作:

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' where expected

移除 lambda 周围的括号会产生 Cannot convert 'lambda expression' to non-delegate type 'MonoTouch.Foundation.NSDateComponents'

正确的 C# 语法是什么?我需要保留闭包,因为我正在移植的代码库中还有很多。

最佳答案

这应该有效:

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

编辑:您可能需要一个 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);

关于c# - 将 ObjC block 转换为 C# Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23976294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com