public object?ToObject() { fixed(VARIANT *thisVariant = &this) { void *data = &thisVariant->data; if (Byref) { data = *((void **)data); // CLR allows VT_EMPTY/NULL | VT_BYREF to have no data. // In other cases, the variant is invalid. if (data is null && !(Type == VARENUM.EMPTY || Type == VARENUM.NULL)) { throw new ArgumentException("Invalid Variant"); } } else if (vt == VARENUM.DECIMAL) { data = thisVariant; } // Note that the following check also covers VT_ILLEGAL. if ((vt & ~(VARENUM.BYREF | VARENUM.ARRAY | VARENUM.VECTOR)) >= (VARENUM)0x80) { throw new InvalidOleVariantTypeException(); } if ((vt & VARENUM.VECTOR) != 0) { return(ToVector(thisVariant->data.ca, vt)); } if ((vt & VARENUM.ARRAY) != 0) { return(ToArray(*(SAFEARRAY **)data, vt)); } return(ToObject(Type, Byref, data)); } }
public void Clear() { PropVariantClear(ref this); vt = VARENUM.EMPTY; data = new VARIANTUnion(); }