[Mono-devel-list] Performance w/ boxing

Joshua Tauberer tauberer at for.net
Fri Feb 20 10:28:58 EST 2004

Jonathan Gilbert wrote:
> Of course, you can always do it Java-style and create a class to wrap an
> integer. You can use operator overloading to make it transparent, too.

If the caller doesn't need to pass specifically null but some other 
invalid-value-signaling value, a struct should, I think, get better 

public struct Integer
   public static Integer NULL = new Integer();
   private readonly bool NotNull; // so that default initialization to 
false means it's null
   public readonly int Value;

   public Integer(int value) { NotNull = true; Value = value; }

   public bool IsNull { get { return !NotNull; } }

   public static implicit operator int(Integer obj) { return obj.Value; }
   public static implicit operator Integer(int val) { return new
Integer(val); }

void function(Integer notboxed) {
   if (notboxed.IsNull) { System.Console.WriteLine("null"); }
   else { System.Console.WriteLine(notboxed * 5); }

public static void Main() {

Unfortunately, I don't think there's a way to implicitly cast from a 
null to anything else.

- Joshua Tauberer


** Nothing Unreal Exists **

More information about the Mono-devel-list mailing list