3

次は同等ですか?特定の状況でタイプ
を使用することは重要ですか?var

現在これを使用しています:

static int ReturnIDfromDb(string sqlString, string outputParam) {
    var connectionString = ConfigurationManager.ConnectionStrings["xxx"].ConnectionString;
    using(var conn = new SqlConnection(connectionString))
    using(var comm = new SqlCommand(sqlString, conn)) {
        ...
    }
}

これはもっと具体的ではありませんか?

static int ReturnIDfromDb(string sqlString, string outputParam) {
    var connectionString = ConfigurationManager.ConnectionStrings["xxx"].ConnectionString;
    using(SqlConnection conn = new SqlConnection(connectionString))
    using(SqlCommand comm = new SqlCommand(sqlString, conn)) {
        ...
    }
}
4

7 に答える 7

5

コンパイラの場合は同じです。真剣に。varハードコーディングされます。

しかし、タイプがわからないため、var を使用しなければならない場合もあります。

IQueryable(LINQ) では、以下を投影できます。

.....

.Select (x=> new { Name = x.Name; }).ToArray();

この場合、匿名型の配列を取得するので...

そうでなければならない

var 結果配列

この時点ではタイプに名前を付けることができないためです。

しかしvar、コンパイラのみのものです。Resharper のコード規則では、type ではなく var を使用します。私は最近同意する傾向があります。

コンパイラの後は同じです。

于 2013-01-06T23:17:10.310 に答える
2

変数に含まれるオブジェクトのタイプを明示的に定義する場合 (この場合、クラス名で new キーワードを使用することvarにより)、クラス名を 2 回入力する代わりに、単純にショートカットとして使用できます。技術的な違いはありません。

を使用varすると、入力と読み取りが簡単になります。たとえば、次のようになります。

Dictionary<int, MyLongNamedObject> dictionary = new Dictionary<int, MyLongNamedObject>();

また

var dictionary = new Dictionary<int, MyLongNamedObject>();
于 2013-01-06T23:18:57.190 に答える
1

コードが実際に必要とするものを反映するクラスまたはインターフェースを指定しようとします。これにより、将来の変更によって他のコードが壊れないという確信が持てます。

私は使用します:

static int ReturnIDfromDb(string sqlString, string outputParam) {
    string connectionString = ConfigurationManager.ConnectionStrings["xxx"].ConnectionString;
    using(DbConnection conn = new SqlConnection(connectionString))
    using(DbCommand comm = conn.CreateCommand()) {
        comm.CommandText = sqlString;
        ...
    }
}

後で aSqlConnectionから anに変更することにした場合、または変数OracleConnectionの使用に変更は必要ないと確信しています。conncomm

~Connection具象または~Commandクラスの独自の機能が必要な場合、これが常に適切であるとは限らないことに注意してください。

于 2013-01-07T03:24:42.483 に答える
1

これらのコードは完全に同等です。

varケースについて知らない 、または知る必要がない場合は、はるかに便利です。

CarクラスとCleanersプロパティがあるとしましょう。このようなコードを書いたとき;

Car c = new Car();
var cleaner = c.Cleaners;

の型を知る必要はcleanerありませIEnumerable<Cleaner>BindingList<Cleaner>IEnumerable<Cleaner>この場合にorを使用するBindingList<Cleaner>と、これが問題になる可能性があります。返される型はこれらの型のいずれかである可能性があるためです。この場合に使用varすると、 の型は気にしませんcleaner

于 2013-01-06T23:31:03.370 に答える
1

それらは同等です。

var式のコンパイル時の型を実際に使用するよりも常に同等です (短いですが)。

ただし、匿名型を使用する場合varは、自分で記述できる特定の名前付き型がないため、 を使用する必要があります。

于 2013-01-06T23:17:42.977 に答える
1

varキーワード自体は「タイプ」ではありません。var型を自動的に推測するようにコンパイラに要求します。違いはありません..

varキーワードの使用は、個人またはチームの好みに帰着します。一貫性を保ち、一目で人間の脳がタイプを推測できる場合にのみ使用するようにしてください。

例えば:

// bad
var customers = GetCustomers();

// good
var customers = GetListOfCustomers();

上記は、インテリセンスが命の恩人になる可能性があることを考えると、個人的な好みかもしれません..しかし、コードを確認するときに役立ちます。

また、ネストされたジェネリック型の宣言を短縮するのにも役立ちます (たとえば、値が文字列のリストを含む辞書でもある辞書)。

于 2013-01-06T23:22:14.300 に答える
0

それは完全に同等です。可能であれば、varを使用しても違いがあるとは思いません。

ただし、var を使用する必要がある場合もあります。

于 2013-01-06T23:18:31.070 に答える