2016-09-27 130 views
-2
if (richTextBox1.Text.Contains("Home") == false) 
{    
    result_show.richTextBox1.Text += "Home in Home Menu is missing."; 
} 

if (richTextBox1.Text.Contains("Users") == false) 
{    
    result_show.richTextBox1.Text += "Users in Home Menu is missing."; 
} 

if (richTextBox1.Text.Contains("Space") == false) 
{    
    result_show.richTextBox1.Text += "Space in Home Menu is missing."; 
} 

https://stackoverflow.com/posts/39720620/ 或者你可以向下滚动地看到,满足我的需要的正确答案。欣赏这一点。有没有什么方法可以缩短这个代码呢?

+0

是否要添加的文本总是相同? –

+0

如果文本相同,只需创建一个单词集合并使用Linq - “Any”作为例子。如果文本不同,请使用字典将关键字与文本相关联,并使用循环遍历字典。 – kiziu

+0

你也可以通过避免方法运行一个列表来检查使用foreach/for-loop语句的项目列表。 – mahlatse

回答

-1
var list = new List<TextAndMessage>() 
{ 
    new TextAndMessage {TextToCompare = "Home", Message = "Home in Home Menu is missing."}, 
    new TextAndMessage {TextToCompare = "Users", Message = "Home in Home Menu is missing."} 
}; 

var sb = new StringBuilder(); 
foreach (var item in list) 
{ 
    if (!richTextBox1.Text.Contains(item.TextToCompare)) 
    { 
     sb.Append(item.Message); 
    } 
} 
//Assigning at the end, as you might falsely check that the string is contained in textbox, that has come from one of the messages. 
result_show.richTextBox1.Text = sb.ToString(); 

public class TextAndMessage 
{ 
    public string TextToCompare { get; set; } 
    public string Message { get; set; } 
} 
+0

这对我很有用~~ 谢谢〜我会添加一些东西来尽可能地压缩它。 :D – puydan

-3

请使用以下模式:

Dictionary<string, string> wordsToCompare = new Dictionary<string, string> 
{ 
    { "Home", "Home in Home Menu is missing." }, 
    { "Users", "Even another string here" }, 
    ... 
}; 

private string GetSuffixString(string word) 
{ 
    string resultString; 
    wordsToCompare.TryGetValue(word, out resultString); 
    return resultString; 
} 

然后使用它:

StringBuilder builder = new StringBuilder(result_show.richTextBox1.Text); 
builder.Append(this.GetSuffixString(richTextBox1.Text)); 
result_show.richTextBox1.Text = builder.ToString(); 
+0

这不是一个完整的解决方案......它什么都不做 – musefan

+0

现在应该是完整的 – Fka

+1

嗯,我不确定它达到了目标。 OP代码建议在有多个匹配的情况下建立一个列表。它也应该使用“包含”而不是完全匹配 – musefan

-1
Dictionary<string,string> Messages = new Dictionary<string,string> {"...."}; 

var sb = new StringBuilder(); 

Messages.ForEach(p=> 
{ 
    if(p.Key.Contains(richTextBox1.Text)) 
    { 
    sb.Append(P.value); 
    } 
}); 
+1

虽然有效的答案,我会建议你包括实际的字典定义。纯粹是因为它有助于澄清你打算如何工作。在这种情况下,OP显然不熟悉字典,所以他们不太可能知道你的意思是什么'{“....”}' – musefan

+1

只有代码答案不是很好的答案,试着添加几行解释问题是什么,代码如何修复它 – MikeT

2
string template = "{0} in Home Menu is missing."; 
string[] keywords = new string[] { "home", "users", "space" }; 
for (int i = 0; i < keywords.Length; i++) 
{ 
    result_show.richTextBox1.Text += richTextBox1.Text.Contains(keywords[i]) ? 
      string.Empty : string.Format(template, keywords[i]); 
} 

使用StringBuilder如果您需要某些性能

+1

您必须切换条件语句的分支:当文本不包含关键字时,您希望附加错误消息。 –

+1

@HansKesting:好点!但是现在为时已晚,我删除了我的upvote,我想我应该编辑答案,而不是 – musefan

+0

,可能/应该是一个foreach循环... – Vogel612

相关问题