2016-09-27 3 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ステートメントを使用してitemsのリストをチェックするために、リストメソッドを使ってリストを実行するだけでよいでしょう。 – 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コードは、複数の一致がある場合にリストを作成することを示唆しています。また、 "contains"を使用して正確に一致する必要はありません。 – 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

答えを編集する必要があると思います... – Vogel612

関連する問題