OptionSetValue behaving like an integer

狂风中的少年 提交于 2019-12-13 09:05:22

问题


I recently experienced an OptionSetValue behaving like an integer in a method of my plugin. Previously, and with all other OptionSetValues, to retrieve the integer value, I have used the pattern:

localIntegerVariable = (new_myEntity.GetAttributeValue<OptionSetValue>("new_myOptionSetAttribute")).Value;

That no longer works in the one of the methods of the plugin. If i treat it like an integer, it works.

localIntegerVariable = (new_myEntity.GetAttributeValue<int>("new_myOptionSetAttribute"));

Strangely enough, in the main section of the same plugin before I retrieve the pre image entity, I treat the same attribute as an OptionSetValue like below and it works just fine.

int incominglocalIntegerVariable = temp.GetAttributeValue<OptionSetValue>("new_myOptionSetAttribute") == null ? _OSV_Empty : temp.GetAttributeValue<OptionSetValue>("new_myOptionSetAttribute").Value;

I have verified that the definition of new_myOptionSetAttribute in the entities.cs file is an OptionSetValue. I have also verified that the definition in CRM is an OptionSet value.

Has anyone experienced this?


回答1:


Below code will throw exact error, because you are trying to assign right side int value to left side OptionSetValue variable:

InvalidCastException: Unable to cast object of type 'System.Int32' to type 'Microsoft.Xrm.Sdk.OptionSetValue'

OptionSetValue localIntegerVariable;

localIntegerVariable = (new_myEntity.GetAttributeValue<OptionSetValue>("new_myOptionSetAttribute")).Value;

In this case localIntegerVariable should be int, because .Value will be giving you int datatype result.

To maintain same datatype, either change it to

int localIntegerVariable;

localIntegerVariable = (new_myEntity.GetAttributeValue<OptionSetValue>("new_myOptionSetAttribute")).Value;

or

OptionSetValue localIntegerVariable;

localIntegerVariable = new_myEntity.GetAttributeValue<OptionSetValue>("new_myOptionSetAttribute");

Last example is better, as it checks null check before accessing .Value using expression temp.GetAttributeValue<OptionSetValue>("new_myOptionSetAttribute") == null ?



来源:https://stackoverflow.com/questions/47759865/optionsetvalue-behaving-like-an-integer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!