1

私は主に独学で C# コードを学びましたが、大学で授業を受けましたが、あまり役に立ちませんでした...確かに本に従う方法を学びました。だから私はあちこちでツールを作成し、オンラインで例を学んでいます。Stackoverflow はそのための私のお気に入りのサイトです。通常、コミュニティは役に立ちます...

とにかく私の質問はこれです、私は小数で複数の計算を行うWPFプログラムを作成しています.同じコード計算を何度も何度も再利用することで取得しています.はるかに少ない行でそれを行います。その知識が欠けているようです。

これが私がどのように物事を行うかの例です。

int int1 = 4;
int int2 = 2;
int int3 = 6;
int int4 = 8;
int calc1 = 0;
int calc2 = 0;
int calc3 = 0;

calc = int1 * int4
calc2 = int1 * int2
calc3 = int3 * int3

if (calc >= calc3)
{
do something;
}
else
{
calc = 33
}

if (calc2 >= calc3)
{
do something;
}
else
{
calc2 = 33
}

if (calc3 >= calc2)
{
do something;
}
else
{
calc3 = 33
}

if (calc3 >= calc)
{
do something;
}
else
{
calc2 = 33
}

それが十分に明確であることを願っています。コードを繰り返すことはできますが、C# をより適切に使用する方法がわかりません。繰り返しコードを減らす方法が組み込まれていることは知っていますが、それらを見つける方法がわかりません。

ヘルプや例をいただければ幸いです。

4

4 に答える 4

7

私が思いつく最も簡単な解決策は、それをメソッドに変えることです。(関数のアクセス修飾子はあなたに任せます...このコードをどこで再利用するかによって異なります)

int CustomCompare(int leftHandSide, int rightHandSide)
{
int calc;
 if (leftHandSide >= rightHandside)
 {
  do something;
 }
 else
 {
  leftHandSide= 33
 }
return leftHandSide
}

変数を渡すだけです。

calc = CustomCompare(calc, calc3)

必要に応じて、何かを行う部分を、渡すカスタム アクションに変更することもできます。MSDNの Action を見てください。

int CustomCompare(int leftHandSide, int rightHandSide, Action doSomething)
{
int calc;
 if (leftHandSide >= rightHandside)
 {
  doSomething();
 }
 else
 {
  leftHandSide= 33
 }
return leftHandSide
}

...

calc = CustomCompare(calc, calc3, 
    ()=>{do some stuff that will be executed inside the method});

Func を使用すると、その doSomething アクションから値を返すことができます

于 2012-05-24T16:56:58.713 に答える
2

このように同じクラスのメソッド間でコードを再利用する最も簡単な方法は、その計算用のプライベート メソッドを定義することです。このようにして、コードをコピーして貼り付けるのではなく、メソッドを呼び出すことでそのコードを参照できます。実際、コピーして貼り付けるたびに、メソッドが抜けていることがわかります。

関連するクラス間でコードを共有する必要がある場合は、基本クラスで保護されたメソッドを作成できます。

最後に、プロジェクト全体の「水平」再利用のために、静的ヘルパー クラスを定義し、それに対するメソッドを public static として定義できます。このようにして、プロジェクト内のすべてのクラスが計算を再利用できるようになります。

于 2012-05-24T16:56:13.537 に答える
1

クラス内にプライベート メソッドを作成し、計算が必要なときにそのメソッドを呼び出す方法はどうでしょうか。これにより、コードを何度も書き直す必要がなくなります。

例:

int int1 = 4;
int calc1 = 0;
Calculation(int1, calc1);

int int2 = 2;
int calc2 = 0;
Calculation(int2, calc2);

//private method
private Calculation(int integer, int calculation)
{
    //calculate
}

補足: 私は最初にすべての変数を配置してから、それに基づいて (関数呼び出しなど) 実行することを好みます (単体テストに関連付けられた Arrange-Act-Assert に基づいて)。しかし、私は自分の主張を強調するためにこのようにしました。

于 2012-05-24T16:56:29.900 に答える
0

エラー....関数を呼び出しますか?

doCalc(4, 2, 6, 8)

static public void doCalc(int int1, int int2, int int3, int int4)
{
  int calc1 = int1 * int4
  int calc2 = int1 * int2
  int calc3 = int3 * int3

  if (calc >= calc3)
  {
    do something;
  }
  else
  {
    calc = 33
  }

  if (calc2 >= calc3)
  {
    do something;
  }
  else
  {
    calc2 = 33
  }

  if (calc3 >= calc2)
  {
    do something;
  }
  else
  {
    calc3 = 33
  }

  if (calc3 >= calc)
  {
    do something;
  }
  else
  {
    calc2 = 33
  }
}

また、インデントに注意してください。新しいスコープを開始するときは、その中にあるものにいくつかのスペースを追加してください。

于 2012-05-24T16:58:17.857 に答える