【发布时间】:2021-03-30 10:11:58
【问题描述】:
我在 ViewModel 中有两个列表视图(普通列表和分组列表),在 UI 中我想使用一个列表视图。 所以我尝试使用动态数据类型进行运行时列表分配。
private dynamic commonList { get; set; }
public dynamic CommonList
{
get
{
return commonList;
}
set
{
commonList = value;
}
}
ItemsGrouped = new ObservableCollection<Grouping<string, ListItem>>(List);
commonList = new ExpandoObject();
commonList = ItemsGrouped;
这很好用,但是当我尝试将另一个列表设置为相同的动态数据类型时,它会导致问题。
Items = new ObservableCollection<ListItem>(List);
commonList = new ExpandoObject();
commonList = Items;
此处应用程序因错误而崩溃:
dynamic_cast 错误 2:以下一个或多个 type_info 具有隐藏可见性或在多个翻译单元中定义。他们都应该有公众知名度。 N10__cxxabiv116__shim_type_infoE, id, N10__cxxabiv117__pbase_type_infoE.
Objective-C 抛出异常。名称:NSInvalidArgumentException 原因:*** -[__NSPlaceholderArray initWithObjects:count:]:尝试从对象 [0] 中插入 nil 对象 本机堆栈跟踪: 0 核心基础 0x00007fff23c7127e __exceptionPreprocess + 350 1 libobjc.A.dylib 0x00007fff513fbb20 objc_exception_throw + 48 2 核心基础 0x00007fff23d03ab1 _CFThrowFormattedException + 194 3 核心基础 0x00007fff23d06cc6 -[__NSPlaceholderArray initWithObjects:count:].cold.3 + 38 4 核心基础 0x00007fff23c4a1c4 -[__NSPlaceholderArray initWithObjects:count:] + 164 5 核心基础 0x00007fff23c5f6d4 +[NSArray arrayWithObjects:count:] + 52 6 CRMM.iOS 0x0000000100c4b280 xamarin_convert_managed_to_nsarray_with_func + 464 7 CRMM.iOS 0x0000000100c4da18 xamarin_managed_string_array_to_nsarray + 40 8 CRMM.iOS 0x0000000100c4dafc xamarin_managed_array_to_nsarray + 124 9 CRMM.iOS 0x0000000100c498be _ZL33xamarin_marshal_return_value_implP9_MonoTypePKcP10MonoObjectbP11_MonoMethodP17MethodDescriptionPj + 558 10 CRMM.iOS 0x0000000100c4963a xamarin_marshal_return_value + 106 11 CRMM.iOS 0x0000000100c595bb _ZL20marshal_return_valuePvPKcmS_P9_MonoTypebP11_MonoMethodP17MethodDescriptionPj + 1915 12 CRMM.iOS 0x0000000100c50fe0 xamarin_invoke_trampoline + 7984 13 CRMM.iOS 0x0000000100c58adb xamarin_arch_trampoline + 107 14 CRMM.iOS 0x0000000100c59ce2 xamarin_x86_64_common_trampoline + 118 15 UIKitCore 0x00007fff48257490-[UITableView _updateIndexTitlesFromDataSource] + 149 16 UIKitCore 0x00007fff4825756f -[UITableView _updateIndex] + 165 17 CRMM.iOS 0x0000000100c59e69 xamarin_dyn_objc_msgSend + 217 18 ??? 0x0000000108d10a0a 0x0 + 4442884618
【问题讨论】:
-
dynamic在 AOT 场景中通常不是一个很好的选择,但是:在所示的情况下,您只展示了分配给私有属性;该属性是否绑定到任何东西?我不希望它爆炸,直到您尝试 消费dynamic类型,这里的代码: 没有显示(嗯,它在堆栈跟踪中显示,但是:堆栈-跟踪似乎与显示的代码不太匹配) -
是的,我已经更新了问题。请重新检查。感谢您的评论
-
最好不要使用
dynamic。如果你立即把它扔到下一行,你为什么要做commonList = new ExpandoObject();?我建议你参加 C# 课程。你似乎有点过头了。 -
好的,我将删除该 ExpandoObject,请您建议我使用哪个属性而不是动态属性来维护单个列表。
标签: c# xamarin xamarin.forms dynamic xamarin.ios