Is there any difference between the two statements:
IntPtr myPtr = new IntPtr(0);
IntPtr myPtr2 = IntPtr.Zero;
I have seen many samples that use PInvoke that prefer the first syntax if the myPtr argument is sent by ref to the called function. If I'll replace all new IntPtr(0) with IntPtr.Zero in my application, will it cause any damage?
IntPtr
is a value type, so unlike String.Empty
there's relatively little benefit in having the static property IntPtr.Zero
As soon as you pass IntPtr.Zero
anywhere you'll get a copy, so for variable initialisation it makes no difference:
IntPtr myPtr = new IntPtr(0);
IntPtr myPtr2 = IntPtr.Zero;
//using myPtr or myPtr2 makes no difference
//you can pass myPtr2 by ref, it's now a copy
There is one exception, and that's comparison:
if( myPtr != new IntPtr(0) ) {
//new pointer initialised to check
}
if( myPtr != IntPtr.Zero ) {
//no new pointer needed
}
As a couple of posters have already said.