【发布时间】:2015-12-02 12:05:41
【问题描述】:
我试图了解我在开发 UWP 应用程序时遇到的这个问题。我能够解决这个问题,但我仍然不清楚它背后的解释/推理。
我在我的代码库中使用来自 XAMLBehaviours SDK 的“EventTriggerBehavior”。此事件用于检查 GridView 的“ClickedItem”。
来自 Microsoft.Xaml.Interactivity 的 IAction.Execute 方法获取 ClickedItem 事件作为参数。
函数定义为object IAction.Execute(object sender, object parameter)
当我在调试模式下运行应用程序时,它工作正常并且参数被分配了正确的值。但是当我对 Release 进行配置时,我意识到我的 Behaviors SDK 无法正常工作。
这是之前的代码sn-p:
object IAction.Execute(object sender, object parameter)
{
object propertyValue = parameter;
foreach (var propertyPathPart in propertyPathParts)
{
var propInfo = propertyValue.GetType().GetTypeInfo().GetDeclaredProperty(propertyPathPart);
if (propInfo != null)
propertyValue = propInfo.GetValue(propertyValue);
}
}
经过进一步调查,我意识到 propertyValue 没有使用正确的值进行初始化。因此,为了解决这个问题,我对参数进行了类型转换。
object propertyValue = parameter as ItemClickEventArgs;
现在一切都开始在发布模式下正常工作,包括启用代码优化时。
当启用了使用 .NET Native 工具链编译时,我会归类为 System.reflection 在发布模式下无法正常工作。当我进行隐式转换时,这不再是问题了。
根据这个视频https://channel9.msdn.com/Shows/Going+Deep/Inside-NET-Native,反射仍然有效,但我不得不为 Behaviors SDK 投射。我想了解更多详细信息并正确理解这一点。
【问题讨论】: