在继续foreach循环之前构建一个字符串

时间:2018-05-20 00:38:22

标签: c# winforms foreach tooltip stringbuilder

我有一些代码用于在我的程序中设置工具提示文本。基本上发生的是,该方法被赋予对应于光标位置的点,并且光标下的所有可用工具提示被组合并在一个工具提示中向用户显示。

我想要做的是构建一个字符串,其中包含光标下每个工具提示的所有文本,然后使用该构建的字符串设置工具提示文本。我的问题是我想在继续foreach循环之前完全构建该字符串。请参阅我在代码中的评论:

.collection("Messages").add(ChatMessage).addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
                @Override
                public void onSuccess(DocumentReference documentReference) {

                    Log.d(TAG, "SUCCESS! " + documentReference.getId());
                    }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Log.w(TAG, "Error adding document", e);
                }
            });

我需要将它全部保存在foreach循环中,因为我需要在设置工具提示后最后打破,以便正确显示工具提示。

1 个答案:

答案 0 :(得分:0)

我真的不明白为什么以下部分不能移到foreach循环之外。

toolTip.SetToolTip(m_control, tte.text);
toolTip.Active = true;
oldRegion = rect;
toolTipUsed = true;
break;

也许是因为这不是完整的源代码,可能会有并发症。

如果是这种情况,请尝试以下备用解决方案。我们的想法是将foreach转换为for循环并使其运行&#39; n + 1&#39;时间在哪里&#39; n&#39;是哈希表中的键数。在第n + 1&#39次迭代中,我们可以检查并运行您想要在最后运行的上述代码。我希望这对你有用,如果它没有,请告诉我它的局限性,我们可以找到更好的解决方案。

        ICollection keyCollection = toolTipRegions.Keys;
        string[] keys = new string[keyCollection.Count];
        keyCollection.CopyTo(keys, 0);
        for (int i = 0; i < keys.Length + 1; i++)
        {
            if (i == keys.Length + 1)
            {
                toolTip.SetToolTip(m_control, tte.text);
                toolTip.Active = true;
                oldRegion = rect;
                toolTipUsed = true;
                break;
            }

            var entry = toolTipRegions[keys[i]];
            var tte = (ToolTipEntry)entry.Value;
            Rectangle rect = tte.region;

            if (RectangleHitTest(point, rect))
            {
                sb.Append(tte.text + "\n");
            }
        }