如何解决在Xamarin.Android绑定库中将Lambda函数传递给C#生成的Kotlin代码Android绑定库
我一直试图在Xamarin项目中使用我的Android库(用Kotlin编写),但是我一直坚持将Lambda函数传递给C#生成的Kotlin代码
我正在尝试做这样的事情
client.DoSomething((response) => {},(error) => {});
但是我遇到了这个错误
CS1660: Cannot convert lambda expression to type 'IFunction1' because it is not a delegate type
using Android.Runtime;
using Java.Interop;
using java.lang;
using Kotlin.Jvm.Functions;
using System;
[Register ("doSomething","(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V","")]
public unsafe void DoSomething (IFunction1 onSuccess,IFunction1 onFailure);
这样做的正确方法是什么?
解决方法
我使用这个类是为了将 Kotlin 绑定导出的 Function1
适配到 C# Lambda:
class Function1Impl<T> : Java.Lang.Object,IFunction1 where T : Java.Lang.Object
{
private readonly Action<T> OnInvoked;
public Function1Impl(Action<T> onInvoked)
{
this.OnInvoked = onInvoked;
}
public Java.Lang.Object Invoke(Java.Lang.Object objParameter)
{
try
{
T parameter = (T)objParameter;
OnInvoked?.Invoke(parameter);
return null;
}
catch (Exception ex)
{
// Exception handling,if needed
}
}
}
使用该类,您将能够执行以下操作:
client.DoSomething(new Function1Impl<ResponseType>((response) => {}),new Function1Impl<ErrorType>((error) => {}));
P.S.:ResponseType
是输入参数 response
的类,ErrorType
是输入参数 error
的类。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。