0

2 つの変数を使用する最善の方法について、簡単な質問があります。基本的に、いくつかの if 内で取得したい値である enum と int があります。if の外側または内側で宣言する必要があります。次の例を検討してください。

エガ:

public void test() {
    EnumName? value = null;
    int distance = 0;

     if(anotherValue == something) {
        distance = 10;
        value = getValue(distance);
     }
     else if(anotherValue == somethingElse) {
        distance = 20;
        value = getValue(distance);
     }


    if (value == theValueWeWant){
      //Do something
 }

また

例2

public void test() {

     if(anotherValue == something) {
        int distance = 10;
        EnumType value = getValue(distance);
        if (value == theValueWeWant){
           //Do something
     }
     else if(anotherValue == somethingElse) {
        int distance = 20;
        EnumType value = getValue(distance);
        if (value == theValueWeWant){
            //Do something
     }

 }

私はちょうど興味がありますか?またはより良い方法がある場合は?

4

4 に答える 4

3

純粋にメンテナンスの観点からは、最初のコード ブロックはコードを複製しないため、より優れています (「何かを実行する」はどちらの場合も同じであると仮定します)。

パフォーマンスに関しては、違いは無視できるはずです。2 番目のケースでは、コンパイルされた IL で 2 倍のローカルが生成されますが、JIT はそれらの使用法が重複していないことに気付き、それらを最適化する必要があります。2 番目のケースでも、同じコードが 2 回発行されます ( if (value == theValueWeWant) { ...) が、これによってパフォーマンスが大幅に低下することはありません。

(2 番目の例の両方の側面により、コンパイルれたアセンブリがわずかに大きくなりますが、より多くの IL が必ずしもパフォーマンスの低下を意味するわけではありません。)

于 2013-07-24T16:18:12.717 に答える
0

後でそれらを使用する場合は、2 番目の方法で g を使用します。これらの変数は、スコープ外になるとすぐに失われます。

後でそれらを使用したくない場合でも、ifコードの繰り返しを避けるために、's の前にそれらを宣言する必要があります。

于 2013-07-24T16:17:17.090 に答える
0

この質問は純粋にスタイルの問題であるため、正解はなく、意見のみです

一般に、C# のベスト プラクティスは、変数が使用されるスコープ内で変数を宣言することです。これは、答えとして 2 番目の例を示します。タイプと名前は同じですが、それらは異なる用途を表しているため、それらが作成されたブロックに制限する必要があります。

于 2013-07-24T16:17:29.020 に答える