C# 转换WebMatrix DynamicRecord或检索底层IDictionary<;字符串,对象>;
这可能很容易,但我真的不明白 据我所知: C中最具C# 转换WebMatrix DynamicRecord或检索底层IDictionary<;字符串,对象>;,c#,c#-4.0,dynamic,casting,dynamicobject,C#,C# 4.0,Dynamic,Casting,Dynamicobject,这可能很容易,但我真的不明白 据我所知: C中最具动态性的类型依赖于IDictionary 我在WebMatrix.Data上做了一次尝试,我想将结果转换到IDictionary,但这不起作用。。。 WebMatrix.Data查询返回一个IEnumerable这就是我试图转换的内容 这是我的naiv代码 var o = (DynamicObject) webmatrixRecord; // No Exception but o is still DynamicRecord var o = (
动态性的类型依赖于IDictionary
我在WebMatrix.Data上做了一次尝试,我想将结果转换到IDictionary
,但这不起作用。。。
WebMatrix.Data查询返回一个IEnumerable
这就是我试图转换的内容
这是我的naiv代码
var o = (DynamicObject) webmatrixRecord; // No Exception but o is still DynamicRecord
var o = (IDictionary<string,object>) webmatrixRecord; // Runtime Binder Exception
var o = ((IDictionary<string,object>)((DynamicRecord)webmatrixRecord)) // InvalidCastException;
var o=(DynamicObject)webmatrixRecord;//也不例外,但o仍然是动态记录
var o=(IDictionary)webmatrixRecord;//运行时绑定异常
var o=((IDictionary)((DynamicRecord)webmatrixRecord))//InvalidCastException;
那么,投射动态对象的正确方法是什么
WebMatrix.DynamicRecord:
Dynamics.DynamicRecord:
C#中最动态的类型依赖于IDictionary
不一定。是的,但是有很多其他的方式可以让你充满活力,但事实并非如此
请注意,引用转换转换转换不会更改对象的类型。那么你在哪里得到了这条线:
var o = (DynamicObject) webmatrixRecord;
。。。变量的类型将是DynamicObject
,但这不会改变o
值所指对象的类型
对于您的其他强制转换,它似乎没有实现IDictionary
,因此您无法强制转换到它。您可以使用获取动态名称,然后使用获取值。但这并不理想——如果可能的话,我个人甚至会尽量避免有这个要求 谢谢你的回复。。。我选择DynamicObject只是因为DynamicRecord继承了它,我认为它让我更接近它:-/我需要DynamicRecord中的ExpandooObject或和IDictionary。。。但是既然你说没有演员阵容,我就得写点什么…@silverfighter:DynamicRecord本身暴露了什么吗?快速浏览之后,我看不到任何内容-因此您可能需要调用GetDynamicMemberNames
,然后调用TryGetMember
,以构建您的词典。就开源版本von WebMatrix而言。数据显示。。我用GetDynamicMemberName和TryGetMember打赌。。。