C# 无法从源类型强制转换为目标类型
我是C#新手,所以我在做一些教程。 当我尝试从Xamarin Studio运行Android教程项目时,出现以下错误: 引发System.InvalidCastException。无法从源类型强制转换为目标类型 这是给出错误的代码:C# 无法从源类型强制转换为目标类型,c#,android,xamarin.android,xamarin,C#,Android,Xamarin.android,Xamarin,我是C#新手,所以我在做一些教程。 当我尝试从Xamarin Studio运行Android教程项目时,出现以下错误: 引发System.InvalidCastException。无法从源类型强制转换为目标类型 这是给出错误的代码: public Java.Lang.Object [] GetSections () { var intPtr = JNIEnv.NewArray (sections.ToArray ()); var array = new JavaArray<
public Java.Lang.Object [] GetSections ()
{
var intPtr = JNIEnv.NewArray (sections.ToArray ());
var array = new JavaArray<Java.Lang.Object> (intPtr, JniHandleOwnership.TransferLocalRef);
return (Java.Lang.Object []) array;
}
public Java.Lang.Object[]GetSections()
{
var intPtr=JNIEnv.NewArray(sections.ToArray());
var数组=新的JavaArray(intPtr,JniHandleOwnership.TransferLocalRef);
返回(Java.Lang.Object[])数组;
}
如何修复此问题?您正在将
JavaArray
转换为Java.Lang.Object[]
将GetSessions()
的返回类型更改为JavaArray
公共JavaArray GetSections()
{
var intPtr=JNIEnv.NewArray(sections.ToArray());
返回新的JavaArray(intPtr、jnihandleowner.TransferLocalRef);
}
第二个问题可能意味着您实现了一个interfacit,其中GetSections方法需要返回类型Java.Lang.Object 如果你自己制作了界面,那么你可能会犯与此方法相同的错误 因此: 公共JavaArray GetSections() { var intPtr=JNIEnv.NewArray(sections.ToArray()); 返回新的JavaArray(intPtr、jnihandleowner.TransferLocalRef); } 您的界面应该如下所示:
public JavaArray<Java.Lang.Object> GetSections ();
公共JavaArray GetSections();
我想你犯了两次同样的错误现在错误变为:错误CS0738:
EmployeeDirectory.Android.PeopleGroupsAdapter'没有实现接口成员
Android.Widget.ISectionIndexer.GetSections()'和最佳实现候选者EmployeeDirectory.Android.PeopleGroupsAdapter.GetSections()“返回类型
Android.Runtime.JavaArray”与接口成员返回类型“Java.Lang.Object[]”不匹配。请同时更改接口上GetSections()的返回类型。类必须与接口匹配…在接口上我可以在什么类型的文件中找到GetSections()?这是一个教程代码,所以我还不知道所有的代码。我应该在哪里编辑界面代码?我到处都找不到。是否有一种方法可以使返回类型为:“return(Java.Lang.Object[])array;”?是的,这是可能的,但这不是你想要的。。可以返回一个对象数组,但只希望返回一个对象。也许您可以尝试使用@Override注释并更改方法的返回类型,但我不确定这是否有效。。或者,一个非常丑陋的解决方案是每次返回一个数组,其中只有一个对象(不推荐),但请先尝试覆盖,如果它不起作用,请告诉我
public JavaArray<Java.Lang.Object> GetSections ()
{
var intPtr = JNIEnv.NewArray (sections.ToArray ());
return new JavaArray<Java.Lang.Object> (intPtr, JniHandleOwnership.TransferLocalRef);
}
public JavaArray<Java.Lang.Object> GetSections ();