2017-01-21 3 views
0

私は同じループを持つ3つのボタンを持っていますが、異なる文字列を1つのループに短くすればループを再利用する必要はありませんか?C#同じループを持つ3つのボタンがありますが、異なる文字列を1つのループに短縮できますか?

public static string VarOutput { get; set; } 

async private void btnCourse1_Click(object sender, RoutedEventArgs e) 
{ 
    string VarOutput = ""; 
    string[] names = new string[3] { "COP3488C,", "UWP1,", "This course is mobile app development." }; 

    for (int i = 0; i < names.Length; i++) 
    { 
     VarOutput = VarOutput + names[i] + " "; 
    } 
    txtBoxCourse.Text = VarOutput; 
    var dialog = new MessageDialog(VarOutput); 
    await dialog.ShowAsync(); 
} 
async private void btnCourse2_Click(object sender, RoutedEventArgs e) 
{ 
    string VarOutput = ""; 
    string[] names = new string[3] { "DOP3488B,", "UWC1,", "This course is Cloud Computing." }; 

    for (int i = 0; i < names.Length; i++) 
    { 
     VarOutput = VarOutput + names[i] + " "; 
    } 
    txtBoxCourse.Text = VarOutput; 
    var dialog = new MessageDialog(VarOutput); 
    await dialog.ShowAsync(); 
} 

async private void btnCourse3_Click(object sender, RoutedEventArgs e) 
{ 
    string VarOutput = ""; 
    string[] names = new string[3] { "BOP3589,", "UWP2,", "This course Computer Programming Java 1." }; 

    for (int i = 0; i < names.Length; i++) 
    { 
     VarOutput = VarOutput + names[i] + " "; 
    } 
    txtBoxCourse.Text = VarOutput; 
    var dialog = new MessageDialog(VarOutput); 
    await dialog.ShowAsync(); 
} 
+0

'私はイエス – Plutonix

+0

はいっその単なる文字列VarOutput = string.Join(」」、名前)'でそれを置き換える1 loop'にそれを短縮することができ; ' – juharr

答えて

1

だけでメソッドを作成し、このように、適切なパラメータとそれを呼び出す:

async private void btnCourse1_Click(object sender, RoutedEventArgs e) 
{ 
    string[] names = new string[3] { "COP3488C,", "UWP1,", "This course is mobile app development." }; 
    await WorkerAsync(names); 
} 
async private void btnCourse2_Click(object sender, RoutedEventArgs e) 
{ 
    string[] names = new string[3] { "DOP3488B,", "UWC1,", "This course is Cloud Computing." }; 
    await WorkerAsync(names); 
} 

async private void btnCourse3_Click(object sender, RoutedEventArgs e) 
{ 

    string[] names = new string[3] { "BOP3589,", "UWP2,", "This course Computer Programming Java 1." }; 
    await WorkerAsync(names); 

} 
private async Task WorkerAsync(string[] names) 
{ 
     string VarOutput = ""; 

     for (int i = 0; i < names.Length; i++) 
     { 
      VarOutput = VarOutput + names[i] + " "; 
     } 
     txtBoxCourse.Text = VarOutput; 
     var dialog = new MessageDialog(VarOutput); 
     await dialog.ShowAsync(); 
} 

注:コードがテストされていません。

+0

あなた' Worker'メソッドが非同期にする必要があるとリターン'タスク'。そしてそれへの呼び出しはそれを「待つ」必要があります。 –

+0

@JoeWhiteちょうど最後の行に気付いた – mok

1

リファクタリングは、forループ

private async Task displayCourseInfo(string[] names) { 
    //Replaced for loop with this line; 
    var message = String.Join(" ", names); 

    txtBoxCourse.Text = message; 
    var dialog = new MessageDialog(message); 
    await dialog.ShowAsync();  
} 

ザに繰り返しコードは単にString.Join

コールイベントハンドラにおける方法に置き換えることができるスペースを含む文字列を構築しています。

private async void btnCourse1_Click(object sender, RoutedEventArgs e) { 
    var names = new []{ "COP3488C,", "UWP1,", "This course is mobile app development." }; 
    await displayCourseInfo(names); 
} 

private async void btnCourse2_Click(object sender, RoutedEventArgs e) { 
    var names = new []{ "DOP3488B,", "UWC1,", "This course is Cloud Computing." }; 
    await displayCourseInfo(names); 
} 

private async void btnCourse3_Click(object sender, RoutedEventArgs e) {  
    var names = new []{ "BOP3589,", "UWP2,", "This course Computer Programming Java 1." }; 
    await displayCourseInfo(names);  
} 
+0

最後のメッセージを変更するために不要なループ、downvoteを削除するためのUpvote –

+1

@CamiloTerevinto最悪の場合、これらの任意のダウンボトムをセトリングして、ささいなことになる。コンセプトが中継されている場合、厳格なスタイルのガイドラインに従わないにもかかわらず答えは正しいです。簡単なコメントで十分です。ダウンボートは、間違った誤った回答やサイトルール違反に使用する必要があります。 – gmiley

+0

私は.Joinメソッドが好きです。それは非常にうまく実装されています。 –

0

私は、文字列クラスに拡張メソッドを追加することで、コードを明確にしてから基本的なリファクタリングを行うことができます。これはそれを行う一つの方法です。

namespace ConsoleApplication2 
{ 
    public static class myExtensionMethods 
    { 
     public static string GetSubs(this string[] input) 
     { 
      string value = ""; 
      input.Select(sub => value += $"{sub} "); 
      return value; 
     } 
    } 
    class Program 
    {   

     async private void btnCourse1_Click(object sender, RoutedEventArgs e) 
     { 
      await ShowDialogAsync(new string[] { "COP3488C,", "UWP1,", "This course is mobile app development." }); 
     } 

     async private void btnCourse2_Click(object sender, RoutedEventArgs e) 
     { 
      await ShowDialogAsync(new string[3] { "DOP3488B,", "UWC1,", "This course is Cloud Computing." }); 
     } 

     async private void btnCourse3_Click(object sender, RoutedEventArgs e) 
     { 
      await ShowDialogAsync(new string[3] { "BOP3589,", "UWP2,", "This course Computer Programming Java 1." }); 
     } 

     private async Task ShowDialogAsync(string [] myStringArray) 
     { 
      string VarOutput = myStringArray.GetSubs(); 
      txtBoxCourse.Text = VarOutput; 
      var dialog = new MessageDialog(VarOutput); 
      await dialog.ShowAsync(); 
     } 
関連する問題