<p>I know we cannot do this at class level but at method level we can always do this. </p>

<pre><code>var myList=new List&lt;string&gt; // or something else like this
</code></pre>

<p>This question came to my mind since wherever we declare variable like this. We always provide the type information at the RHS of the expression.  So compiler doesn't need to do type guessing. (correct me if i am wrong).</p>

<p>so question remains WHY NOT at class level while its allowed at method level</p>

The compiler guys just didn't implement the support.
It's entirely compiler magic, and the compiler doesn't actually put something into IL that says "figure out the type at runtime", it knows the type and builds it in, so it could've done that for members as well.
It just doesn't.
I'm pretty sure that if you asked an actual compiler guy on the C# compiler team, you'd get something official, but there's no magic happening here and it should be possible to do the same for members fields.