C#通过通用LinkedList循环时访问项目属性<;T>;

C#通过通用LinkedList循环时访问项目属性<;T>;,c#,linked-list,C#,Linked List,我正在尝试做一些我认为非常简单的事情。但它不起作用,我不知道为什么。我也很困惑,为什么我搜索了这么多,却找不到一个通过通用linkedlist循环并访问linkedlist中包含的对象属性的示例。这看起来很基本,会有很多例子 我有一个泛型链表,它定义为类中的私有字段,并具有相应的公共属性 private LinkedList<MyObject> _genericLinkedListOfMyObjects; 以下工作均未完成: foreach (MyObject item i

我正在尝试做一些我认为非常简单的事情。但它不起作用,我不知道为什么。我也很困惑,为什么我搜索了这么多,却找不到一个通过通用linkedlist循环并访问linkedlist中包含的对象属性的示例。这看起来很基本,会有很多例子

我有一个泛型链表,它定义为类中的私有字段,并具有相应的公共属性

    private LinkedList<MyObject> _genericLinkedListOfMyObjects;
以下工作均未完成:

foreach (MyObject item in genericLinkedListOfMyObjects)
{
    item.property1; //NOPE!
}
这将导致编译器错误“'MyObject'不包含'property1'的定义,并且找不到接受'MyObject'类型的第一个参数的可访问扩展方法'property1'(是否缺少using指令或程序集引用)?”

也不是

这导致编译错误“类型参数'MyObject'不能与'as'运算符一起使用,因为它既没有类类型约束,也没有'class'约束。”


当我循环浏览时,如何访问通用链表中某个项目的property1值?提前谢谢。

好的,Ed你是对的,还有其他事情正在发生。我将努力弄清楚这是什么。但我很欣慰地知道,这是与命名空间有关的,而不是与LinkedList有关的意外情况

因此,是的,下面的工作很好。感谢您指出问题的可能来源,并且您认为我的代码应该工作得很好

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestLinkedList1
{
    public class TestClass
    {

        public void DoStuff()
        {
            MyObject myobj1 = new MyObject();
            MyObject myobj2 = new MyObject();

            myobj1.property1 = "Foo";
            myobj2.property1 = "Bar";

            LinkedList<MyObject> genericLinkedListofMyObjects = new LinkedList<MyObject>();

            genericLinkedListofMyObjects.AddFirst(myobj1);
            genericLinkedListofMyObjects.AddFirst(myobj2);

            foreach (var item in genericLinkedListofMyObjects)
            {
                string mystring = item.property1; //WORKS!
            }

        }

    }

    public class MyObject
    {
        public string property1 { get; set; }
    }

}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
命名空间TestLinkedList1
{
公共类TestClass
{
公共空间
{
MyObject myobj1=新的MyObject();
MyObject myobj2=新的MyObject();
myobj1.property1=“Foo”;
myobj2.property1=“Bar”;
LinkedList genericLinkedListofMyObjects=new LinkedList();
genericLinkedListofMyObjects.AddFirst(myobj1);
genericLinkedListofMyObjects.AddFirst(myobj2);
foreach(GenericLinkedListofMyObject中的变量项)
{
string mystring=item.property1;//有效!
}
}
}
公共类MyObject
{
公共字符串属性1{get;set;}
}
}

您粘贴的代码不完整,因此上面的代码可能存在多个问题。我可以假设其中两个问题:

while (current !=null)
{
    current.Value.property1; //NOPE!
}
您将得到以下错误: 只能将assignemt、call、increment、decrement、wait和new对象表达式用作语句

因此,您必须对current.Value.property1执行一些操作,要么将其分配给某个变量,调用另一个方法,要么递增,等等

这里还有:

foreach (MyObject item in genericLinkedListOfMyObjects)
但是上面的变量是用前缀“u”调用的。根据粘贴在此处的代码很难判断。因此,您有2个字段,或者您的循环应该使用GenericLinkedListofMyObject,如下所述:

private LinkedList<MyObject> _genericLinkedListOfMyObjects;
private LinkedList\u genericLinkedListofMyObject;
代码示例:

这里是一个小的控制台应用程序,你可以看到如何使用LinkedList进行你的尝试

using System;
using System.Collections.Generic;

namespace TestLinkedList
{
    class Program
    {
        static void Main(string[] args)
        {
            var test = new TestLinkedList();
            test.Test1();
            Console.WriteLine();
            test.Test2();
            Console.WriteLine();
            test.Test3();
            Console.WriteLine();
            Console.WriteLine("Done!");
            Console.ReadKey();
        }
    }

    public class MyObject
    {
        public string property1 { get; set; }
        public string property2 { get; set; }
    }

    public class TestLinkedList
    {
        private LinkedList<MyObject> _genericLinkedListOfMyObjects; 

        public void Test1()
        {
            Console.WriteLine("Test1");
            _genericLinkedListOfMyObjects = new LinkedList<MyObject>();
            _genericLinkedListOfMyObjects.AddFirst(new MyObject{ property1="Prop1 Test1", property2="Prop2 Test1" });
            _genericLinkedListOfMyObjects.AddFirst(new MyObject{ property1="Prop1 Test2", property2="Prop2 Test2" });

            foreach (MyObject item in _genericLinkedListOfMyObjects)
            {
                Console.WriteLine(item.property1);
                Console.WriteLine(item.property2);
            }
        }

        public void Test2()
        {
            Console.WriteLine("Test2");
            _genericLinkedListOfMyObjects = new LinkedList<MyObject>();
            _genericLinkedListOfMyObjects.AddFirst(new MyObject{ property1="Prop1 Test1", property2="Prop2 Test1" });
            _genericLinkedListOfMyObjects.AddFirst(new MyObject{ property1="Prop1 Test2", property2="Prop2 Test2" });

            LinkedListNode<MyObject> current = _genericLinkedListOfMyObjects.First;
            while (current !=null)
            {
                Console.WriteLine(current.Value.property1);
                Console.WriteLine(current.Value.property2);
                current = current.Next;
            }
        }

        public void Test3()
        {
            Console.WriteLine("Test3");
            _genericLinkedListOfMyObjects = new LinkedList<MyObject>();
            _genericLinkedListOfMyObjects.AddFirst(new MyObject{ property1="Prop1 Test1", property2="Prop2 Test1" });
            _genericLinkedListOfMyObjects.AddFirst(new MyObject{ property1="Prop1 Test2", property2="Prop2 Test2" });

            LinkedListNode<MyObject> current = _genericLinkedListOfMyObjects.First;
            foreach (var item in _genericLinkedListOfMyObjects)
            {
                MyObject myObj = item as MyObject; //NOPE!
                Console.WriteLine(myObj.property1);
                Console.WriteLine(myObj.property2);
            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
命名空间TestLinkedList
{
班级计划
{
静态void Main(字符串[]参数)
{
var test=新的TestLinkedList();
test.Test1();
Console.WriteLine();
test.Test2();
Console.WriteLine();
test.Test3();
Console.WriteLine();
控制台。WriteLine(“完成!”);
Console.ReadKey();
}
}
公共类MyObject
{
公共字符串属性1{get;set;}
公共字符串属性2{get;set;}
}
公共类TestLinkedList
{
私有LinkedList _GenericLinkedListFmyObjects;
公共void Test1()
{
控制台写入线(“Test1”);
_genericLinkedListOfMyObjects=新建LinkedList();
_genericLinkedListOfMyObjects.AddFirst(新的MyObject{property1=“Prop1 Test1”,property2=“Prop2 Test1”});
_GenericLinkedListofMyObject.AddFirst(新的MyObject{property1=“Prop1 Test2”,property2=“Prop2 Test2”});
foreach(通用链接列表对象中的MyObject项)
{
控制台写入线(项目1);
控制台写入线(项目2);
}
}
公共无效测试2()
{
控制台写入线(“Test2”);
_genericLinkedListOfMyObjects=新建LinkedList();
_genericLinkedListOfMyObjects.AddFirst(新的MyObject{property1=“Prop1 Test1”,property2=“Prop2 Test1”});
_GenericLinkedListofMyObject.AddFirst(新的MyObject{property1=“Prop1 Test2”,property2=“Prop2 Test2”});
LinkedListNode当前=_genericLinkedListFmyObjects.First;
while(当前!=null)
{
Console.WriteLine(current.Value.property1);
Console.WriteLine(current.Value.property2);
当前=当前。下一步;
}
}
公共无效测试3()
{
控制台写入线(“Test3”);
_genericLinkedListOfMyObjects=新建LinkedList();
_genericLinkedListOfMyObjects.AddFirst(新的MyObject{property1=“Prop1 Test1”,property2=“Prop2 Test1”});
_GenericLinkedListofMyObject.AddFirst(新的MyObject{property1=“Prop1 Test2”,property2=“Prop2 Test2”});
LinkedListNode当前=_genericLinkedListFmyObjects.First;
foreach(GenericLinkedListofMyObject中的变量项)
{
MyObject myObj=项目作为MyObject;//否!
控制台写入线(myObj.property1);
控制台写入线(myObj.property2);
}
}
}
}
“以下工作均不存在
foreach (MyObject item in genericLinkedListOfMyObjects)
private LinkedList<MyObject> _genericLinkedListOfMyObjects;
using System;
using System.Collections.Generic;

namespace TestLinkedList
{
    class Program
    {
        static void Main(string[] args)
        {
            var test = new TestLinkedList();
            test.Test1();
            Console.WriteLine();
            test.Test2();
            Console.WriteLine();
            test.Test3();
            Console.WriteLine();
            Console.WriteLine("Done!");
            Console.ReadKey();
        }
    }

    public class MyObject
    {
        public string property1 { get; set; }
        public string property2 { get; set; }
    }

    public class TestLinkedList
    {
        private LinkedList<MyObject> _genericLinkedListOfMyObjects; 

        public void Test1()
        {
            Console.WriteLine("Test1");
            _genericLinkedListOfMyObjects = new LinkedList<MyObject>();
            _genericLinkedListOfMyObjects.AddFirst(new MyObject{ property1="Prop1 Test1", property2="Prop2 Test1" });
            _genericLinkedListOfMyObjects.AddFirst(new MyObject{ property1="Prop1 Test2", property2="Prop2 Test2" });

            foreach (MyObject item in _genericLinkedListOfMyObjects)
            {
                Console.WriteLine(item.property1);
                Console.WriteLine(item.property2);
            }
        }

        public void Test2()
        {
            Console.WriteLine("Test2");
            _genericLinkedListOfMyObjects = new LinkedList<MyObject>();
            _genericLinkedListOfMyObjects.AddFirst(new MyObject{ property1="Prop1 Test1", property2="Prop2 Test1" });
            _genericLinkedListOfMyObjects.AddFirst(new MyObject{ property1="Prop1 Test2", property2="Prop2 Test2" });

            LinkedListNode<MyObject> current = _genericLinkedListOfMyObjects.First;
            while (current !=null)
            {
                Console.WriteLine(current.Value.property1);
                Console.WriteLine(current.Value.property2);
                current = current.Next;
            }
        }

        public void Test3()
        {
            Console.WriteLine("Test3");
            _genericLinkedListOfMyObjects = new LinkedList<MyObject>();
            _genericLinkedListOfMyObjects.AddFirst(new MyObject{ property1="Prop1 Test1", property2="Prop2 Test1" });
            _genericLinkedListOfMyObjects.AddFirst(new MyObject{ property1="Prop1 Test2", property2="Prop2 Test2" });

            LinkedListNode<MyObject> current = _genericLinkedListOfMyObjects.First;
            foreach (var item in _genericLinkedListOfMyObjects)
            {
                MyObject myObj = item as MyObject; //NOPE!
                Console.WriteLine(myObj.property1);
                Console.WriteLine(myObj.property2);
            }
        }
    }
}