<p>Is there a simple attribute or data contract that I can assign to a function parameter that prevents <code>null</code> from being passed in C#/.NET?  Ideally this would also check at compile time to make sure the literal <code>null</code> isn't being used anywhere for it and at run-time throw <code>ArgumentNullException</code>.</p>

<p>Currently I write something like ...</p>

<pre><code>if (null == arg)
  throw new ArgumentNullException("arg");
</code></pre>

<p>... for every argument that I expect to not be <code>null</code>.</p>

<p>On the same note, is there an opposite to <code>Nullable&lt;&gt;</code> whereby the following would fail:</p>

<pre><code>NonNullable&lt;string&gt; s = null; // throw some kind of exception
</code></pre>

There's nothing available at compile-time, unfortunately.
I have a bit of a
hacky solution
which I posted on my blog recently, which uses a new struct and conversions.
In .NET 4.0 with the
Code Contracts
stuff, life will be a lot nicer. It would still be quite nice to have actual language syntax and support around non-nullability, but the code contracts will help a lot.
I also have an extension method in
MiscUtil
called ThrowIfNull which makes it a bit simpler.
One final point - any reason for using "
```
if (null == arg)
```
" instead of "
```
if (arg == null)
```
"? I find the latter easier to read, and the problem the former solves in C doesn't apply to C#.