How about this one. I think this should take less operations (at least fewer comparisons):
return (value == (Int32)value);
Also remember that if the if just returns a boolean, you can simply return the comparison. Only this can make it faster (if the compiler no longer optimizes for this). If you need to use the if statement, you can also do this:
if (value == (Int32)value) { //Do stuff... return true; } else { //Do stuff... return false; }
EDIT: I understand that this actually doesn't work. I thought that throwing Int32 would simply copy into the first 32 bits of the decimal, leaving all the remaining bits (and not throwing an exception), but alas, it did not work (not to mention that it would be wrong for all negative values).
source share