【问题标题】:Creating a property with the object of the same class in c#在c#中用同一个类的对象创建一个属性
【发布时间】:2013-06-18 06:36:14
【问题描述】:

我正在尝试以下内容:

public class AHME
{
    public string elementName { get; set; }
    public long? elementID { get; set; }
    public AHME[] children { get; set; }

    public static AHME[] GetAHME()
    {
        var listS = new List<AHME>();

        using (var db = new DBEntities())
        {
            AHME sList = db.Stnd.Select(s => new AHME
            {
                elementID = s.ID,
                elementName = s.Name,
            }).ToList();
            
            listS.Add(sList);

            var listT = new List<AHME>();

            using (var db = new DBEntities())
            {
                AHME tList = db.Tr.Join(db.Us, t => t.ID, u => u.ID, (t, u) => new AHME
                {
                    elementID = t.ID,
                    elementName = u.FirstNames + " " + u.LastName,
                    children=listS.ToArray(),
                });

                listT.Add(tList).ToList();
            }
            
            return listT.ToArray();
        }
    }
}

但我收到如下错误:

无法将类型“System.Collections.Generic.List&lt;LSB.HM.AHME&gt;”隐式转换为“LSB.HM.AHME

无法将类型“System.Linq.IQueryable&lt;LSB.HM.AHME&gt;”隐式转换为“LSB.HM.AHME”。存在显式转换(您是否缺少演员表?)

另外,对于“AHME sList”,如果我可以使用像var sList 这样的var 类型, 那么它的抛出错误是:

&lt;LSB.HM.AHME&gt;.Add 有一些无效的论点

【问题讨论】:

  • 在查询开始时尝试List&lt;AHME&gt; sList =
  • 您能指出哪些 产生了这些错误吗?该信息应该在编译器输出中。并且不要只说行号 - 在发生错误的代码行末尾添加 cmets。
  • 我认为你应该先学习 C# 的基础知识,然后再开始涉足 LINQ。
  • 如果您再次编辑,请注意我们中的一些人一直在尝试修复您的格式,因为&lt;&gt; 尖括号不会出现在简单的叙述文本中,我们必须将其标记为代码.
  • @Euphoric - 为什么你认为 OP 不了解 C# 的基础知识?

标签: c# c#-4.0


【解决方案1】:

您正在尝试将 List&lt;AHME&gt; 对象分配给 AHME 变量。试试这样:

        var sList = db.Stnd.Select(s => new AHME
        {
            elementID = s.ID,
            elementName = s.Name,
        }).ToList();

Join 行也是如此。

【讨论】:

  • @Stuart 我认为这是平局。让我 +1。
【解决方案2】:

问题出在以下块中:

        AHME sList = db.Stnd.Select(s => new AHME
        {
            elementID = s.ID,
            elementName = s.Name,
        }).ToList();

您不能将 IList&lt;T&gt; 转换为 T

最简单的解决方案是使用var

        var sList = db.Stnd.Select(s => new AHME
        {
            elementID = s.ID,
            elementName = s.Name,
        }).ToList();

【讨论】:

    【解决方案3】:

    感谢所有人和 Writwick。

    我使用了一个 foreach 循环来遍历 var sList 并将 sList 中的项目添加到 ListS 中,从概念上讲,我认为应该是这样的,因为 sList 包含对象列表,并且需要一一添加到 ListS。

    【讨论】:

    • 另见:.AddRange()。您不需要loopList&lt;T&gt; 添加到另一个List&lt;T&gt;,其中T 属于同一类型,在您的情况下为AHME
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 2018-07-16
    • 2010-10-15
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多