这可能不是我最清楚的问题但是我们走了。我有一个实例化对象的类。此对象通过一系列方法运行,并从Web服务dll调用一些值。这是我的问题。被拉入对象数组的两个字符串必须通过foreach循环,以便通过另一个方法传递它们。
我不知道如何捕获foreach循环的结果并将它们传递到循环之外,以便我可以处理它们。
本质上,我试图遍历一个对象数组并在foreach循环中单独输出每个对象,然后我想将这两个对象传递出来,以便我可以将它们传递给方法。
我能够将每个对象键入一个字符串,连接字符串,并将字符串传递给循环。然后,我可以使用split方法来分割字符串,但它们现在是字符串,不再是对象,因此我的方法不再有效。我在这里结束了我的智慧,任何建议都会很棒......
以下是有问题的代码摘录
JciFqr objRootFqr = objClient.CreateFqr("SIPE-NAE-001", "Programming.CommonPath", JciFqr.Classifications.Folder, JciFqr.Types.Folder);
JciFqr[] aobjRoomFqrs = await objClient.GetObjectsAsync(objRootFqr, CancellationToken.None);
foreach(JciFqr objFqr in aobjRoomFqrs)
{
System.Console.WriteLine(objFqr);
JciFqr objCodeFqr = JciFqr.Create(objFqr, "Code_Blue", JciFqr.Classifications.Object, JciFqr.Types.BinaryValue);
await objClient.WritePropertyAsync(objCodeFqr, "Present Value", a_bOn ? "on" : "off", CancellationToken.None);
System.Console.WriteLine(objCodeFqr);
//await objClient.ReadPropertyAsync(objCodeBlueFqr, "Present Value", a_bOn ? "on" : "off", CancellationToken.None);
var obj = objCodeFqr ;
fqrs = obj + "|" + fqrs;
count++;
}
Console.WriteLine(count);
Console.WriteLine(fqrs);
string[] fqrArray = fqrs.Split('|');
for (int i = 0; i < fqrArray.Length; i++)
{
Console.WriteLine(fqrArray[i]);
}
string strStatus = "";
string uri1 = fqrArray[0];
string uri2 = fqrArray[1];
bool triggerCodeBlue = false;
Console.WriteLine("Trigger the Code");
triggerCodeBlue = bool.Parse(Console.ReadLine());
答案 0 :(得分:3)
在循环之前,请设置List
来存储对象:
List<JciFqr> fqrs = new List<JciFqr>();
在循环中,将对象存储在列表中:
fqrs.Add(objCodeFqr);
在循环之后,您可以访问fqrs[0]
和fqrs[1]
,或使用其他foreach
循环播放。
答案 1 :(得分:0)
我没有真正理解代码,但从问题中的描述看,似乎也可以使用关键字&#34; yield&#34;
yield函数允许您逐个从循环返回值并将这些结果转换为可枚举,例如:
static IEnumerable<string> Combinations(string input){
for(int i=0;i<input.length-1; i++){
for(int j=0;j<input.length; j++){
yield return input[i].ToString() + input[j].ToString();
}
}
}
static void Main(string[] args)
{
foreach (string output in Combinations("abc")){
Console.WriteLine(output); //outputs "ab", "ac", "bc"
}
}
从算法上讲,产生结果与将它们添加到列表并返回列表相同,但是当您产生大量结果时,可以使用更少的内存。
答案 2 :(得分:0)
foreach循环中还有回收率。我猜这些类型因为它们非常清楚。
IEnumerable<Tuple<JciFqr, JciFqr>> GetStuff() {
foreach(JciFqr objFqr in aobjRoomFqrs){
JciFqr objCodeFqr = JciFqr.Create(objFqr, "Code_Blue", JciFqr.Classifications.Object, JciFqr.Types.BinaryValue);
await objClient.WritePropertyAsync(objCodeFqr, "Present Value", a_bOn ? "on" : "off", CancellationToken.None);
yield return Tuple.Create(objFgr, objCodeFgr);
}
}
您可以枚举从这样的函数返回的集合:
foreach(var pair in GetStuff()){
//do other stuff here
Console.WriteLine(string.format("Item1: {0}, Item2: {1}", pair.Item1, pair.Item2));
}