pet*_*ski 7 c# dynamic-typing dynamictype
这是我的代码:
MyClass here = new MyClass();
IEnumerable<MyClass> vats = (IEnumerable<MyClass>)here.All();
Run Code Online (Sandbox Code Playgroud)
All()方法返回IEnumerable <dynamic>.我想将其转换为IEnumerable <MyClass>.上面的行没有工作,它说无法将'd__15'类型的对象强制转换为'System.Collections.Generic.IEnumerable`1 [MyClass]'.
我也尝试过:
IEnumerable<MyClass> vats = here.All() as IEnumerable<MyClass>;
Run Code Online (Sandbox Code Playgroud)
但它返回null.
与dbaseman的答案(和AKX的评论)类似,我会使用Cast:
IEnumerable<MyClass> vats = here.All().Cast<MyClass>();
Run Code Online (Sandbox Code Playgroud)
你需要usingLINQ 的指令:
using System.Linq;
Run Code Online (Sandbox Code Playgroud)
在您的文件的顶部.如果Select方法无法识别,听起来你还没有.
请注意,这假设每个值确实是一个MyClass引用.
编辑:如果您希望能够通过索引访问值,我建议使用ToList:
List<MyClass> vats = here.All().Cast<MyClass>().ToList();
Run Code Online (Sandbox Code Playgroud)
虽然ToArray也可以,但在大多数情况下,我个人更喜欢列表而不是数组,因为它们更灵活.
编辑:听起来你的结果实际上是充满了ExpandoObject.您需要MyClass从每个项目创建一个新实例,例如
List<MyClass> vats = here.All()
.Select(item => new MyClass(item.Name, item.Value))
.ToList();
Run Code Online (Sandbox Code Playgroud)
或者可能:
List<MyClass> vats = here.All()
.Select(item => new MyClass {
Name = item.Name,
Value = item.Value,
})
.ToList();
Run Code Online (Sandbox Code Playgroud)
这只是一个例子,我不希望直接工作 - 我们不能做得更好,因为我们对你的结果实际返回的方式一无所知.
听起来好像你在这里,我害怕.