问题
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