我正在编写一个程序,该程序使用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
成员。
是否有任何想法或需要澄清我的问题?
答案 0 :(得分:0)
似乎打字这一切都给了我一些清晰度,因为我在这篇文章后不到5分钟就解决了这个问题。您可以简单地使用类型转换(OptionSetValue)
foreach (KeyValuePair<string, object> thePair in e.Attributes.ToList())
{
int theResult = (OptionSetValue)thePair.Value.Value;
}