gpt4 book ai didi

c# - 将动态转换为对象

转载 作者:太空狗 更新时间:2023-10-29 20:21:21 26 4
gpt4 key购买 nike

这是我的代码:

MyClass here = new MyClass();
IEnumerable<MyClass> vats = (IEnumerable<MyClass>)here.All();

All() 方法返回 IEnumerable 。我想将它转换为 IEnumerable 。上面的行不起作用,它说 Unable to cast object of type 'd__15' to type 'System.Collections.Generic.IEnumerable`1[MyClass]'。

我也试过:

 IEnumerable<MyClass> vats = here.All() as IEnumerable<MyClass>;

但它返回 null。

最佳答案

类似于 dbaseman 的回答(和 AKX 的评论)我会使用 Cast:

IEnumerable<MyClass> vats = here.All().Cast<MyClass>();

不过,对于 LINQ,您需要一个 using 指令:

using System.Linq;

在文件的顶部。如果无法识别 Select 方法,这听起来好像您还没有做到这一点。

请注意,这假定每个值确实 是一个MyClass 引用。

编辑:如果您希望能够通过索引访问值,我建议使用 ToList:

List<MyClass> vats = here.All().Cast<MyClass>().ToList();

虽然 ToArray 也可以,但在大多数情况下我个人更喜欢列表而不是数组,因为它们更灵活。

编辑:听起来您的结果实际上充满了 ExpandoObject。您需要从每个项目创建一个新的 MyClass 实例,例如

List<MyClass> vats = here.All()
.Select(item => new MyClass(item.Name, item.Value))
.ToList();

或者可能:

List<MyClass> vats = here.All()
.Select(item => new MyClass {
Name = item.Name,
Value = item.Value,
})
.ToList();

只是一个示例,我不希望它立即起作用 - 我们不能做得比这更好,因为我们对您的结果实际上是如何返回的一无所知。

这听起来确实让你难以理解,恐怕。

关于c# - 将动态转换为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10477821/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com