【发布时间】:2017-12-19 13:01:20
【问题描述】:
我正在尝试创建一个匿名列表,该列表可以包含任何具有 intellisense 支持但不创建 class 的 data type。
所以我找到了以下使用匿名类型的解决方案。
var list = new[]
{
new { Number = 10, Name = "Smith" },
new { Number = 10, Name = "John" }
}.ToList();
foreach (var item in list)
{
Console.WriteLine(item.Name);
}
但是如果我想要一个返回匿名类型以上的方法怎么办。
public List<object> GetData()
{
var list = new[]
{
new { Number = 10, Name = "Smith" },
new { Number = 10, Name = "John" }
}.ToList();
return list;
}
编译时错误:
不能隐式转换类型 'System.Collections.Generic.List' 到 'System.Collections.Generic.List
是否可以将匿名类型列表转换为支持智能感知的对象列表?
更新:
我们不想创建类型的原因,因为我们只想使用匿名类型进行一些数据操作并填充一些其他对象。
【问题讨论】:
-
我怀疑只是创建一个类型将是这里解决方案的最短/最干净的路径。为什么要努力避免这种情况?
-
匿名类型并不意味着在通用或本地上下文之外使用,所以不是。您必须返回
object、dynamic或元组类型之一或类似类型,但不能使用智能感知返回匿名类型。为此,我们已经有了正确的解决方案,创建一个适当的命名类型。 -
新 C# 编译器中的元组支持命名,但这是一个技巧,它很快就会崩溃。同样,正确的方法是使用正确的命名类型。
-
然后返回
dynamic并希望一切顺利。它不会给你智能感知,但它会让你很容易地接触到里面的成员。 -
如果您可以使用 c# 7 功能 - 您可以使用命名元组。
标签: c# anonymous-types