2012-01-16 4 views
0

StopWatchラベルが0に等しいときに、そのラベルを非表示にしたいのですが、どうすれば条件演算子を使用できますか?変数が0のときにラベルを非表示にする

using System; 
using System.Diagnostics; 
using System.Threading; 

namespace FileTransfer_Socket_Client 
{ 
class transferRate 
{ 
    static Stopwatch stopWatch = new Stopwatch(); 
    public static void timeLeft() 
    { 
     Thread StimeLeft = new Thread(Start); 
     StimeLeft.Start(); 
    } 

    private static void Start() 
    { 
     int rate = 0; 
     int left = 0; 
     int prevSum = 0; 
     stopWatch.Start(); 
     while (fileTransfer.client.Connected) 
     { 
      if (fileTransfer.sum != 0) 
      { 
       rate = (fileTransfer.sum-prevSum)/1024; 
       left = ((fileTransfer.fileSize - fileTransfer.sum)/ 1024)/rate; 
       TimeSpan t = TimeSpan.FromSeconds(left); 
       Program.mainForm.AppendLabel(string.Format("{0}kb/s timeleft: {1:D2}:{2:D2}:{3:D2}", rate, t.Hours, t.Minutes, t.Seconds)); 
       prevSum = fileTransfer.sum; 
       Thread.Sleep(1000); 
      } 
     } 
     stopWatch.Stop(); 
     stopWatch.Reset(); 
    } 
}} 
+1

はい、シンプルで速い方法はifステートメントを使用しています... – Dan

+0

例を含めて、コードの関連部分だけを投稿してください。 –

+0

なぜ 'if'文を使いたくないのですか?代わりに条件演算子を使用して満足していますか?コードの行数を増やすとプログラムの実行が遅くなるという誤った考え方に苦しんでいますか? –

答えて

5

これを成し遂げるために、より「面白い」の方法がありますが、if/elseは最も基本的な方法です:私たちはこのようにそれを書き、の重複を避けることができ

if (t.TotalMinutes < 1) { 
    Program.mainForm.AppendLabel(string.Format("{0}kb/s timeleft: {1:D2}", rate, t.Seconds)); 
} else { 
    Program.mainForm.AppendLabel(string.Format("{0}kb/s timeleft: {1:D2}:{2:D2}:{3:D2}", rate, t.Hours, t.Minutes, t.Seconds)) 
} 

注意メソッド呼び出し:

String text; 
if (t.TotalMinutes < 1) { 
    text = string.Format("{0}kb/s timeleft: {1:D2}", rate, t.Seconds); 
} else { 
    text = string.Format("{0}kb/s timeleft: {1:D2}:{2:D2}:{3:D2}", rate, t.Hours, t.Minutes, t.Seconds); 
} 
Program.mainForm.AppendLabel(text); 

それとも我々は三(条件演算子)を使用することができます

var text = t.TotalMinutes < 1 
    ? string.Format("{0}kb/s timeleft: {1:D2}", rate, t.Seconds) 
    : string.Format("{0}kb/s timeleft: {1:D2}:{2:D2}:{3:D2}", rate, t.Hours, t.Minutes, t.Seconds); 
Program.mainForm.AppendLabel(text); 

それとも私たちはメソッド内でうまくそれをすべてを置くことができます:コーディング

string FormatRemainingText (int rate, TimeSpan t) { 
    if (t.TotalMinutes < 1) { 
     return string.Format("{0}kb/s timeleft: {1:D2}", rate, t.Seconds); 
    } else { 
     return string.Format("{0}kb/s timeleft: {1:D2}:{2:D2}:{3:D2}", rate, t.Hours, t.Minutes, t.Seconds); 
    } 
} 
Program.mainForm.AppendLabel(FormatRemainingText(rate, t)); 

ハッピー。

+0

実際に私は条件演算子(?)を探していたが、私はそれを使用する方法を知りませんでした..ありがとうalot =) –

関連する問題