C# 循环浏览列表

C# 循环浏览列表,c#,list,class,foreach,C#,List,Class,Foreach,好的,我有一节课,如下所示: public class MT101 { // Sequence A public string tag20 { get; set; } // 16x public string tag21R { get; set; } // 16x public string tag28D { get; set; } // 16x public List<String> tag

好的,我有一节课,如下所示:

public class MT101
    {

        // Sequence A
        public string tag20 { get; set; }  // 16x
        public string tag21R { get; set; } // 16x
        public string tag28D { get; set; } // 16x
        public List<String> tag50;         // Option F, G, H, C, or L
      }
    public class CheckMessage
    {
        private List<MT101> Message101 = new List<MT101>();
        public List<MT101> CheckMt101Message(string[] messageBody)
        {
            MT101 buildMessage = new MT101();
            .
            .
            . perform all the neccessary logic to add into buildMessage and then return the
            . Message101 object
            Message101.Add(buildMessage);
            return Message101;
        }
     }
并按如下方式传递变量:

  GlobalClasses.CheckMessage gm = new GlobalClasses.CheckMessage();
  string[] _block4 = Regex.Split(trimmed, @"\r\n");
  gm.CheckMt101Message(_block4);

        foreach (GlobalClasses.CheckMessage item in gm)
        { }
在visual studio中,我在编译时遇到以下错误:

错误1 GlobalClasses.MT101.System.Collections.IEnumerable.GetEnumerator()':包含的类型未实现接口“System.Collections.IEnumerable”

错误2 foreach语句无法对“GlobalClasses.CheckMessage”类型的变量进行操作,因为“SASMI.GlobalClasses.CheckMessage”不包含“GetEnumerator”的公共定义

我在谷歌上搜索并找到了将IEnumerable设置为类的引用,所以我尝试了以下方法:

公共类Mt101:IEnumberable


正在报告相同的消息。

您忽略了
CheckMt101Message
的返回值,而是尝试在类本身上迭代。那不行。保存返回值并对其进行迭代:

var messages = gm.CheckMt101Message(_block4);

foreach (Mt101 item in messages)
{ 
    ... 
}

您忽略了
CheckMt101Message
的返回值,而是尝试迭代类本身。那不行。保存返回值并对其进行迭代:

var messages = gm.CheckMt101Message(_block4);

foreach (Mt101 item in messages)
{ 
    ... 
}
你必须这样做

foreach (MT101 item in gm.CheckMt101Message(_block4)) { ... }
恐怕您有一个很大的困惑,所以我建议您检查自己的代码为什么不工作,这将比复制粘贴任何提供的解决方案对您更有帮助。

您必须这样做

foreach (MT101 item in gm.CheckMt101Message(_block4)) { ... }

我担心您会有很大的困惑,因此我建议您检查一下代码不工作的原因,这将比复制粘贴任何提供的解决方案对您更有帮助。

我猜您希望迭代类中
Message101
字段中的
MT101
对象。最简单的方法是将
Message101
公开,例如:

public class CheckMessage
{
    private List<MT101> message101 = new List<MT101>();

    public List<MT101> Messge101 { get { return message101; } }

    public List<MT101> CheckMt101Message(string[] messageBody)
    {
        MT101 buildMessage = new MT101();
        .
        .
        . perform all the neccessary logic to add into buildMessage and then return the
        . Message101 object
        Message101.Add(buildMessage);
        return Message101;
    }
}

我猜您希望迭代类中
Message101
字段中的
MT101
对象。最简单的方法是将
Message101
公开,例如:

public class CheckMessage
{
    private List<MT101> message101 = new List<MT101>();

    public List<MT101> Messge101 { get { return message101; } }

    public List<MT101> CheckMt101Message(string[] messageBody)
    {
        MT101 buildMessage = new MT101();
        .
        .
        . perform all the neccessary logic to add into buildMessage and then return the
        . Message101 object
        Message101.Add(buildMessage);
        return Message101;
    }
}

这是迭代循环的过程之一

EMP oeemp= new EMP();
            List<EMP> tr= new List<EMP>();
            foreach(var t in tr)
            {
            }
EMP-oemp=new-EMP();
List tr=新列表();
foreach(tr中的var t)
{
}

这是迭代循环的过程之一

EMP oeemp= new EMP();
            List<EMP> tr= new List<EMP>();
            foreach(var t in tr)
            {
            }
EMP-oemp=new-EMP();
List tr=新列表();
foreach(tr中的var t)
{
}

如果您想使用对类CheckMessage的引用在内部列表上进行迭代,那么您需要实现一个返回IEnumerator的函数,如下所示

在CheckMessage类中

    public IEnumerator<MT101> GetEnumerator()
    {
        foreach (MT101 m in this.Message101)
        {
             yield return m;
        }
    }

当然,您也可以在CheckMt101Message的返回值上执行foreach,但是允许一些优点。您只需要引用CheckMessage类,不需要公开内部列表,您可以随时仅使用CheckMessage引用执行循环,并且可以在yeld前后添加自定义代码。

如果您希望使用对类CheckMessage的引用在内部列表上进行迭代,那么您需要实现一个返回IEnumerator的函数,如下所示

在CheckMessage类中

    public IEnumerator<MT101> GetEnumerator()
    {
        foreach (MT101 m in this.Message101)
        {
             yield return m;
        }
    }


当然,您也可以在CheckMt101Message的返回值上执行foreach,但是允许一些优点。您只需要引用CheckMessage类,不需要公开内部列表,您可以随时只使用CheckMessage引用执行循环,并且可以在yeld之前和之后添加自定义代码。

您试图迭代哪个集合/列表??您不了解错误的哪一部分?你的
foreach
没有意义。
CheckMessage
不是一个
IEnumerable
gm是一个类而不是一个列表,我甚至不知道从哪里开始,你真的需要重新思考这个问题。问题在于
foreach(gm中的GlobalClasses.CheckMessage项)
您试图迭代哪个集合/列表??您不了解错误的哪一部分?你的
foreach
没有意义。
CheckMessage
不是一个
IEnumerable
gm是一个类,而不是一个列表,我甚至不知道从哪里开始,你真的需要重新思考这个问题。问题在于
foreach(gm中的GlobalClasses.CheckMessage项)
这同样有效。但是,这需要您添加一个块,以便能够对其进行迭代。如果您只是将
CheckMt101Message
的结果复制到一个变量中,那么您不必添加一个块来遍历列表。好的,这一个上有很多响应。Pieter,你的回答是正确的,我想迭代这个类。我的想法是,我可以建立一个对象,要么包含单弦,要么包含一系列弦。然后我需要循环检查每一个,并对它们执行进一步的检查。这同样有效。但是,这需要您添加一个块,以便能够对其进行迭代。如果您只是将
CheckMt101Message
的结果复制到一个变量中,那么您不必添加一个块来遍历列表。好的,这一个上有很多响应。Pieter,你的回答是正确的,我想迭代这个类。我的想法是,我可以建立一个对象,要么包含单弦,要么包含一系列弦。然后我需要循环检查每一个,并对它们执行进一步的检查。
foreach
中的项目类型应该是
MT101
,而不是
globalclass。CheckMessage
或只是
var
。感谢您捕捉到了这个:)。干杯,排序它的是
foreach
中的项目类型应该是
MT101
,不是
GlobalClasses。检查message
或只是
var
。谢谢你抓到了那一个:)。干杯,彼特,我是史蒂夫,不能接受两个amswers,否则这也会得到一个勾号。这是你的选择,没问题。我支持我的答案,因为我认为它产生了一个更好的代码。嗨,史蒂夫,不能接受两个amswers,否则这也会得到一个勾号。这是你的选择,没问题。我支持我的答案,因为我认为它能产生效果