[英]How can i check if the lines are identical?
private bool displayed;
private void PostMessage()
{
for (int i = 0; i < ScrollLabel._lines.Length; i++)
{
for (int x = 0; x < WordsList.words.Length; x++)
{
if (ScrollLabel._lines[i].Contains(WordsList.words[x]) && !displayed)
{
displayed = true;
lineToPost = ScrollLabel._lines[i];
PostFacebookWall(LongaccessToken, lineToPost + Environment.NewLine + Environment.NewLine + "נשלח באופן אוטומטי כניסיון דרך תוכנה");
}
}
}
}
我每秒在計時器滴答事件中調用此方法。
但是,如果變量字符串lineToPost
相同,則不會再次發送。 但是這可能是lineToPost
可能在其中包含完全相同的單詞,但整行不同的一種情況,所以我想發送它。
只有整行都一樣,才不要postFacebookWall
如果整行不相同,但是與其他行相同,則使用PostFacebookWall
方法。
我使用的是bool
變量,因此不會重復發送同一行。
問題是我現在使用bool
的方式,它將發送一條線,然后再也不會發送任何其他行。
假設我了解您的問題,則可以存儲發送的行以檢測到沒有更改。
// key: line index, value: sent line
private Dictionary<int, string> sent = new Dictionary<int, string>();
private void PostMessage()
{
for (int i = 0; i < ScrollLabel._lines.Length; i++)
{
var line = ScrollLabel._lines[i];
if(sent.ContainsKey(i) && sent[i] == line) continue;
sent[i] = line;
if (WordsList.Any(line.Contains))
PostFacebookWall(LongaccessToken, line + Environment.NewLine + Environment.NewLine
+ "נשלח באופן אוטומטי כניסיון דרך תוכנה");
}
}
也許我監督了一些事情,但是我只記得字符串變量中的最后一行,並且僅當當前行與最后一行不同時才執行內部for循環。
這似乎非常適合於Reactive Extensions 。 使用Rx,您可以將行的推送與實際的發送操作分離。
您可能會有一個公開IObservable<Line>
,另一個負責發送的類。 在發件人中,您將訂閱可觀察的消息,指出只有與上次推送的行不同時才需要換行。 您可以為此使用DistinctUntilChanged
。
Rx是一個需要理解的復雜框架。 如果這是某種玩具示例,而您對Rx不了解,那么我可能會保留其他已發布的解決方案之一。 如果這是一個比較嚴重的/專業的工作,雖然,我會徹底地考慮方法,因為它是更優雅和簡單的實施和維護。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.