

StyleCopのコードクリーニング設定でvarキーワード使用のオプションがありますが、現在社内でこの設定をしています。

![画像の説明をここに入力](https://i.stack.imgur.com/NQJt0.png)

私が最初に設定したのではないので、なぜ、常にVarを使用するかは分かりません。知っているのはvarを使用する際にコードが読みやすいこと。ネットで検索をしたら、[stackoverflow本家にちょっと似たような質問を見つけました](https://stackoverflow.com/questions/41479/use-
of-var-keyword-in-c-sharp)

結構面白い話題なので、varキーワード常に使用すべきかどうか、国内の開発者の意見を聞きたいです。


CC BY-SA 3.0
2015-02-20T18:06:27.803
6842
2015-02-22T05:42:56.600
2017-05-23T12:38:56.083
-1
5987
question
c#
StyleCopのコードクリーニング設定でvarキーワード使用のオプションがあり、varキーワード使用すべきなのか？


基本的には、常にvarキーワードを使用します。  
しかし、数値を扱う型、int,long,doubleなどは、varよりも、型名をそのまま指定したほうが  
良い場合もあります。


CC BY-SA 3.0
2015-02-21T03:11:33.803
6852
2015-02-21T03:11:33.803
2207
6842
answer


本家でロックされている質問を持ち込むのはどうかと思いますが、var常用者として型推論を使わないケースを挙げておきます。

  * ジェネリックでない`IEnumerable`の列挙時

例) Windows Forms

[code]

    foreach(Control c in Controls) // 型推論不能だがキャストは可能
    
[/code]

  * 後でアップキャストした値を再設定する場合

例) Entity Frameworkの検索時

[code]

    IQueryable<Hoge> q = new SomeDbContext().TableHoge; // DbSet<Hoge>
    if(fuga != null)
        q = q.Where(_ => _.Fuga == fuga); // IQueryable<Hoge>
    
[/code]

  * `T`等の型名が短い場合


CC BY-SA 3.0
2015-02-21T03:44:08.247
6855
2015-02-21T03:44:08.247
5750
6842
answer


個人的にvarを常用しています。  
但し､以下の場合は推論型ではなく、明示的な型の利用を検討しています。

  1. ラムダ式とDelegateの組み合わせ
  2. blogなどの記事にする際のサンプルコード

1.に関しては、ラムダ式をvar で受けることができませんので､いずれかの書き方になります｡

[code]

    var binOp=(Func<int,int,int>)((x,y)=>x+y);
    Func<int,int,int> binOp=(x,y)=>x+y;
    
[/code]

個人的には前者より後者の方が可読性が上で、余計なブラケットがない分書きやすいと考えているので､上記の場合はvarを使うことはあまりないです。

2.に関しては、記事内のサンプルで使ってしまうと、見ている側の理解の妨げになると思いますので､極力型を明示した形にしていることが多いです。  
ただ、リテラルが直近で代入されているなど明らかな場合はvarを使ってしまうこともあるのでこの辺は割とゆるふわです。

私感ですが、この辺の影響は局所的なので、規約があればそれに従うし、無ければ無くてもそんな酷いことにはならないかな？とは思います。


CC BY-SA 3.0
2015-02-21T04:07:38.990
6857
2015-02-22T05:42:56.600
2015-02-22T05:42:56.600
7287
7287
6842
answer