将对象类型转换为Microsoft.Xrm.Sdk.OptionSetValue类型

时间:2017-05-24 15:57:13

标签: c# dynamics-crm crm

我正在编写一个程序,该程序使用Microsoft Dynamics CRM API来填充表单,其中包含从CRM提供的EntityCollection中获取的信息。我的问题是实体由KeyValuePair<string, object>组成,这引起了头痛。 kvps中的一些对象在运行时是OptionSetValue类型,我需要一种实际访问该值的方法,因为OptionSetValue需要一个额外的访问器。

这里有一些示例代码来演示我的问题(&#39; e&#39;是实体):

foreach (KeyValuePair<string, object> thePair in e.Attributes.ToList())
{
    int theResult = thePair.Value;
}

在上面的例子中,程序将编译,但会在运行时抛出一个期望,因为它会尝试从OptionSetValue转换为int32

这是我想以某种方式完成的事情:

foreach (KeyValuePair<string, object> thePair in e.Attributes.ToList())
{
    int theResult = thePair.Value.Value;
}

在这种情况下,.Value访问器将返回我需要的值,但由于C#编译器在运行时之前不知道thePair的类型为OptionSetValue,因此它不会编译,因为对象类型没有.Value成员。

是否有任何想法或需要澄清我的问题?

1 个答案:

答案 0 :(得分:0)

似乎打字这一切都给了我一些清晰度,因为我在这篇文章后不到5分钟就解决了这个问题。您可以简单地使用类型转换(OptionSetValue)

foreach (KeyValuePair<string, object> thePair in e.Attributes.ToList())
{
    int theResult = (OptionSetValue)thePair.Value.Value;
}