在某些情况下,我需要确定一种类型,我只是不知道它是什么类型。例如,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;
}
答案 0 :(得分:2)
您可以使用object.GetType()
- 所有对象都可以实现它,因此您只需使用它:
e.Data.GetDataPresent(variable.GetType())
更新
对于修订版(拖放数据只能通过IDataObject
访问而且没有变量),这个答案对OP的用处有限。对于那些没有这些限制的人可能会有所帮助,我会把它留在这里。
答案 1 :(得分:2)
如果你有一个未知类型的变量,你可以在该变量上调用GetType()(该方法对所有对象都是通用的),你将得到一个Type实例,表示变量的派生类型最多。
在这种情况下,听起来你正在试图询问这个DataObject是否有某种形式的数据可以表示为你传入的类型。在这种情况下,你应该知道你想要使用什么(字符串,数字,日期时间等),你应该指定。如果你不知道你想从DataObject中得到什么,那么它将不会非常有用。