Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换WebMatrix DynamicRecord或检索底层IDictionary<;字符串,对象>;_C#_C# 4.0_Dynamic_Casting_Dynamicobject - Fatal编程技术网

C# 转换WebMatrix DynamicRecord或检索底层IDictionary<;字符串,对象>;

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 = (

这可能很容易,但我真的不明白

据我所知: C中最具
动态性的
类型依赖于
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打赌。。。