好的,我的课程如下:
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;
}
}
我从另一个类中调用Method:
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
正在报告相同的消息。
答案 0 :(得分:2)
您忽略了CheckMt101Message
的返回值,而是尝试迭代类本身。那不行。保存返回值并迭代它:
var messages = gm.CheckMt101Message(_block4);
foreach (Mt101 item in messages)
{
...
}
答案 1 :(得分:2)
我想您想要迭代类中MT101
字段中的Message101
个对象。实现这一目标的最简单方法是将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;
}
}
然后你可以迭代这些对象:
foreach (MT101 item in gm.Message101)
{
// ...
}
答案 2 :(得分:1)
这是迭代循环的程序之一
EMP oeemp= new EMP();
List<EMP> tr= new List<EMP>();
foreach(var t in tr)
{
}
答案 3 :(得分:1)
如果你想使用对类CheckMessage的引用来迭代内部List,那么你需要实现一个返回这样的IEnumerator的函数
CheckMessage类中的
public IEnumerator<MT101> GetEnumerator()
{
foreach (MT101 m in this.Message101)
{
yield return m;
}
}
代码
foreach(MT101 m in gm)
{
.....
}
当然你也可以在CheckMt101Message的返回值上执行foreach,但yield keyword允许一些优点。你需要只有对CheckMessage类的引用,你不需要公开你的内部列表,你可以随时使用CheckMessage引用来执行循环,你可以在yeld之前和之后添加自定义代码。 / p>
答案 4 :(得分:0)
你必须做
foreach (MT101 item in gm.CheckMt101Message(_block4)) { ... }
我担心你会有很大的困惑,所以我建议你检查一下你的代码无法正常工作的原因,这对你来说比复制粘贴任何提供的解决方案更有帮助。