OptionSetValue的行为类似于整数

时间:2017-12-11 19:19:24

标签: c# plugins dynamics-crm

我最近经历过一个OptionSetValue,就像我的插件方法中的整数一样。以前,和所有其他OptionSetValues一样,为了检索整数值,我使用了模式:

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

这不再适用于插件的其中一种方法。如果我把它当成一个整数,它就可以了。

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

奇怪的是,在我检索预图像实体之前,在同一插件的主要部分中,我将同一属性视为如下所示的OptionSetValue,并且它的工作正常。

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

我已经验证了entities.cs文件中new_myOptionSetAttribute的定义是一个OptionSetValue。我还验证了CRM中的定义是一个OptionSet值。

有没有人经历过这个?

1 个答案:

答案 0 :(得分:1)

下面的代码会抛出确切的错误,因为您尝试将右侧int值分配给左侧OptionSetValue变量:

  

InvalidCastException:无法转换类型为&#39; System.Int32&#39;的对象输入&#39; Microsoft.Xrm.Sdk.OptionSetValue&#39;

OptionSetValue localIntegerVariable;

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

在这种情况下,localIntegerVariable应为int,因为.Value将为您提供int数据类型结果。

要保持相同的数据类型,请将其更改为

int localIntegerVariable;

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

OptionSetValue localIntegerVariable;

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

最后一个示例更好,因为它在使用表达式null

访问.Value之前检查temp.GetAttributeValue<OptionSetValue>("new_myOptionSetAttribute") == null ?检查