これについては多くの議論がありますが、ほとんどどこでも「this」キーワードを使用するのと同じように、すべて個人的な好みに帰着すると思います.
個人的には明示的に型指定された変数を好みますが、ネストされたジェネリック コレクションを使用する場合は、暗黙的に型指定された変数を使用すると読みやすくなります。見る:
Dictionary<string, Dictionary<string, string>> myDictionary = new Dictionary<string, Dictionary<string, string>>();
対:
var myDictionary = new Dictionary<string, Dictionary<string, string>>();
編集: この SO トピックは、同じトピックをカバーしています。
EDIT2: 最近は非同期で多くの作業を行っていますが、明示的に型指定された変数を使用すると、厄介なバグを防ぐことができる場合があります。ユーザーの Id を返したいこのばかげた例を考えてみましょう。GetUserAsync
を返すことも考慮してTask<User>
ください。暗黙的に型指定された変数を使用すると、次のようなものを使用することになります。
public long GetUserId()
{
var user = GetUserAsync();
return user.Id;
}
これはコンパイルされますが、間違っています。「ユーザー」は実際にはTask<User>
. Task
また、プロパティも持っているため、コンパイルされId
ます。この場合、誤ってユーザーの代わりにタスクの ID を返すことがあります。
public long GetUserId()
{
User user = GetUserAsync();
return user.Id;
}
コンパイラは、ユーザーにタスクをキャストできないと不平を言うため、上記はコンパイルされません。await
もちろん、キーワードを追加するとこれが解決します。
私は実際にこれが私に一度起こったことがあります:-)