有没有办法确定未知类型?

时间:2012-03-12 15:17:17

标签: c#

在某些情况下,我需要确定一种类型,我只是不知道它是什么类型。例如,DevExpress插件在获取数据时请求类型。

e.Data.GetDataPresent(typeof(DataRow))

我将数据源设置为DataTable。我不知道存在的数据实际上是String,DataRow,DataColumn还是其他。

有没有办法确定这种类型而不必在调试器/立即窗口中逐个破解所有可能性?

更新
在这种情况下,它是一个winform app事件

private void grid_VDragOver(object sender, System.Windows.Forms.DragEventArgs e)
        {
            if (e.Data.GetDataPresent(typeof(DataColumn)))//DataColumn is just a guess..no idea
                e.Effect = DragDropEffects.Move;
            else
                e.Effect = DragDropEffects.None;
        }

2 个答案:

答案 0 :(得分:2)

您可以使用object.GetType() - 所有对象都可以实现它,因此您只需使用它:

e.Data.GetDataPresent(variable.GetType())

更新

对于修订版(拖放数据只能通过IDataObject访问而且没有变量),这个答案对OP的用处有限。对于那些没有这些限制的人可能会有所帮助,我会把它留在这里。

答案 1 :(得分:2)

如果你有一个未知类型的变量,你可以在该变量上调用GetType()(该方法对所有对象都是通用的),你将得到一个Type实例,表示变量的派生类型最多。

在这种情况下,听起来你正在试图询问这个DataObject是否有某种形式的数据可以表示为你传入的类型。在这种情况下,你应该知道你想要使用什么(字符串,数字,日期时间等),你应该指定。如果你不知道你想从DataObject中得到什么,那么它将不会非常有用。