1

以下のようなクラスがあります。

public class Dropdown
{
    [Required(ErrorMessage = "Please select state")]
    public string StateId { get; set; }

    public List<SelectListItem> States
    {
        get
        {
            return new List<SelectListItem>() 
            { 
                new SelectListItem
                { 
                    Text = "State1", 
                    Value = "S1", 
                    Selected = false
                },
                new SelectListItem
                { 
                    Selected = false, 
                    Value = "S2", 
                    Text = "State2"
                }
            };
        }
    }
}

Action Method では、このクラスをインスタンス化する際に以下の 2 つのオプションがあります。

アプローチ1

var d = new Models.Dropdown();

アプローチ 2

Models.Dropdown d = new Models.Dropdown();

どちらも同じ数のメソッド/プロパティ/データ メンバーなどを示しています。また、アプローチ 1 を使用することをお勧めすると聞きました。

質問

アプローチ 1 を使用する私の仮定は正しいですか?

4

4 に答える 4

3

キーワードは、var暗黙的な型宣言を許可するコンパイラ機能ですvar。短いため、純粋に使用することを選択します。

を使用すると可読性が失われると人々はおそらく言うでしょうがvar

MyClass myobj = new MyClass()

よりも読みやすい

var myobj = new MyClass()

明示的な型を使用することが理にかなっていると私が考える唯一のシナリオは、インターフェース型を宣言するときです。

IMyInterface myobj = new MyClass()

またはキャスティング

MyBaseClass myObj = new MyClass()

繰り返しになりますが、同じコードが機能的に同等であるため、これらのケースについても議論できます。

var myObj = (IMyInterface)new MyClass()
var myObj = (MyBaseClass)new MyClass()

一般に、インスタンス化された型によって推論されるため、型を明示的に定義する必要はほとんどありません。

于 2013-06-02T10:17:02.450 に答える
3

どちらも同等です。実際、#1 と書くと、コンパイラはそれを #2 に解決します。重要なのは読みやすさです。

読みやすさに悪影響を与えるという理由だけで var を避けるべき理由については、長い議論があります。私の意見では、可能な場合は避けるべきですが、極端な場合、式の明示的な型を記述するのは面倒です (グループ化または二重グループ化を使用して複雑な linq 式を記述し、その型を書き留めてみてください)。

于 2013-06-02T10:19:24.597 に答える
0

読みやすさ以外に違いはありません。

アプローチ 1 の方が読みやすいと思うので、アプローチ 1 を選択します。

于 2013-06-02T10:16:34.117 に答える
0

varタイプが推測されるためです。したがって、タイプの観点からは、両方のアプローチに違いはありません。

varより読みやすいので、可能な限りStylecop使用することをお勧めしますvar

完全な情報を得るには、この質問をご覧ください。

于 2013-06-02T10:18:47.083 に答える