public static EsriDataObject ConvertToEsriDataObject(IDataObject dataObject)
        {
            //
            EsriDataObject esriDataObject = new EsriDataObject();

            // Exit if dropped object is invalid
            if (EsriDataObject.IsValid(dataObject))
            {
                // Get Byte Array from DataObject
                object       esriLayers   = dataObject.GetData(EsriRegistry.DATAOBJECT_ESRILAYERS);
                MemoryStream memoryStream = (MemoryStream)esriLayers;
                byte[]       bytes        = memoryStream.ToArray();

                // Load Byte Array into a Stream (ESRI Wrapper of IStream)
                IMemoryBlobStreamVariant memoryBlobStreamVariant = new MemoryBlobStreamClass();
                memoryBlobStreamVariant.ImportFromVariant(bytes);
                IMemoryBlobStream2 memoryBlobStream = (IMemoryBlobStream2)memoryBlobStreamVariant;
                IStream            stream           = (IStream)memoryBlobStream;

                // Load Stream into an ESRI ObjectStream
                IObjectStream objectStream = new ObjectStreamClass();
                objectStream.Stream = stream;

                // Get Number of Layers in Dropped Object
                byte pv;
                uint cb = sizeof(int);
                uint pcbRead;
                objectStream.RemoteRead(out pv, cb, out pcbRead);
                int count = Convert.ToInt32(pv);

                // Define Guids
                Guid guidLayer = new Guid(EsriRegistry.INTERFACE_ILAYER);
                Guid guidTable = new Guid(EsriRegistry.INTERFACE_ITABLEPROPERTY);

                // Get Dropped Layers
                for (int i = 0; i < count; i++)
                {
                    object o     = objectStream.LoadObject(ref guidLayer, null);
                    ILayer layer = (ILayer)o;
                    esriDataObject.LayerCollection.Add(layer);
                }

                // Get Dropped TableProperties
                for (int i = 0; i < count; i++)
                {
                    object o = objectStream.LoadObject(ref guidTable, null);
                    if (o == null)
                    {
                        continue;
                    }
                    ITableProperty tableProperty = (ITableProperty)o;
                    esriDataObject.TablePropertyCollection.Add(tableProperty);
                }
            }

            return(esriDataObject);
        }