C# 如何检查行是否相同? private bool显示; 私有void PostMessage() { 对于(int i=0;i
我每秒在计时器滴答声事件中调用此方法C# 如何检查行是否相同? private bool显示; 私有void PostMessage() { 对于(int i=0;i,c#,winforms,C#,Winforms,我每秒在计时器滴答声事件中调用此方法 但如果变量字符串lineToPost相同,则不会再次发送。 但是可能是这样一种情况,lineToPost中可能包含完全相同的单词,但整行内容不相同,因此我想发送它 只有当整行内容相同时,才不要使用postFacebookWall 如果整行与其他行不同,但同一单词是同一行,则使用PostFacebookWall方法 我使用的是bool变量,因此它不会一次又一次地发送同一行 我希望它发送一次(s)线,无论是否只有一条线或如果有多条线 问题是我现在使用bo
- 但如果变量字符串
相同,则不会再次发送。 但是可能是这样一种情况,lineToPost
中可能包含完全相同的单词,但整行内容不相同,因此我想发送它lineToPost
- 只有当整行内容相同时,才不要使用
postFacebookWall
- 如果整行与其他行不同,但同一单词是同一行,则使用
方法PostFacebookWall
bool
变量,因此它不会一次又一次地发送同一行
- 我希望它发送一次(s)线,无论是否只有一条线或如果有多条线李>
问题是我现在使用
bool
的方式,它会发送一行,然后再也不会发送任何其他行 也许我监督了一些事情,但我只会记住字符串变量中的最后一行,并且只有当当前行与最后一行不同时才执行内部for循环。假设我了解您的问题,您可以存储发送的行以检测是否没有更改
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 + "נשלח באופן אוטומטי כניסיון דרך תוכנה");
}
}
}
}
//键:行索引,值:已发送行
已发送专用词典=新建词典();
私有void PostMessage()
{
对于(int i=0;i
这似乎非常适合。使用Rx,您可以将线的推送与实际的发送操作解耦
您可能会有一个类公开一个IObservable
,另一个类负责发送。在sender中,您将订阅observable,声明只有在与上一行不同时才需要新行。你可以用这个
不过,Rx是一个复杂的框架。如果这是一个玩具的例子,而你不知道Rx,我可能会保留其他的解决方案之一。如果这是一个更严肃/专业的工作,我会仔细考虑这个方法,因为它更优雅和简单的实现和维护。你很近但是不够接近,<代码> GTHASCODE()<代码>告诉你这两行“可能”是相等的,但它并不能肯定地告诉你。两个完全不同的字符串很可能具有相同的哈希代码。把它改成
字典
,我想这个解决方案会管用。@ScottChamberlain是的,你是对的,尽管我怀疑他的应用程序会有问题。为什么说HashSet
应该是字典值?每个索引只有一个字符串,我会使用string
我认为每个索引可能有多个字符串。
// 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
+ "נשלח באופן אוטומטי כניסיון דרך תוכנה");
}
}