c# - 返回匿名类型

标签 c# .net linq return-type

我正在使用一个技巧来返回匿名类型但是,我不确定它是否会 在所有情况下工作。如果使用这个技巧有任何问题请告诉我 这样我就不会在我的项目中使用这段代码

class A
{
    public int ID { get; set; }
    public string Name { get; set; }
}

class B
{
    public int AID { get; set; }
    public string Address { get; set; }
}

private List<object> GetJoin()
{
    var query = from a in objA
                join b in objB
                on a.ID equals b.AID
                select new { a.ID, a.Name, b.Address };
    List<object> lst = new List<object>();
    foreach (var item in query)
    {
        object obj = new { ID = item.ID, Name = item.Name, Address = item.Address };
        lst.Add(obj);
    }
    return lst;
}
T Cast<T>(object obj, T type)
{
    return (T)obj;
}

//call Anonymous Type function
foreach (var o in GetJoin())
{
    var typed = Cast(o, new { ID = 0, Name = "", Address = "" });
    int i = 0;
}

最佳答案

是的,只要所有内容都在同一个程序集中,它就可以保证工作。如果你越过程序集边界,它就不会工作——匿名类型是内部的,“身份”基于:

  • 正在使用的程序集
  • 属性:
    • 姓名
    • 类型
    • 订单

一切都必须恰到好处,类型才会被视为相同。

虽然不错。一方面,您的 GetJoin 方法可以简化为:

return (from a in objA
        join b in objB
        on a.ID equals b.AID
        select (object) new { a.ID, a.Name, b.Address })
       .ToList();

...另一方面,您已经失去了编译时类型安全性和可读性。

我认为您最好创建一个真正的 类型来封装这些数据。诚然,如果我们可以创建一个与匿名类型等效的命名类型,只是有一个名称,那就太好了……但目前还不可用:(

关于c# - 返回匿名类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5015918/

相关文章:

c# - 如何检测图像何时出现在 PictureBox 中

c# - 在 C# 中对预排序输入进行优化分组

c# - 当我在 linq 中为 `Where` 条件使用具有基本类型的 lambda 创建程序时出现编译错误

c# - 我的 ASP.NET DropDownList 无法正常工作

c# - 是否可以传递服务过滤器参数?

c# - 在 C# 中检查空字符串的最有效方法

c# - 为什么 GroupJoin 不是左外连接?

c# - Razor 中的 JavaScript 编码错误

c# - aspnet_compiler 在 C# mvc2 应用程序上寻找 jsharp 代码提供程序

.net - PowerShell 添加成员到数组项