带有Type对象的C#DataObject作为数据

时间:2017-10-30 13:52:25

标签: c# .net types

我需要使用DataObject实例传递Type作为数据。我尝试了以下代码,但结果为null。

DataObject data = new DataObject(typeof(String));
Type result = (Type)data.GetData(typeof(Type));  //expected result to be typeof(String)

我正在尝试执行以下操作,但我使用的是Type对象而不是String对象。

DataObject data = new DataObject("abc");
String result = (String)data.GetData(typeof(String));  //the result is "abc"

知道为什么我不能使用DataObject传递Type对象吗?

--- EDIT1 ---

我实际上正在使用System.Windows.DataObject来确定DragEventArgs.Data.GetData方法返回null的原因。 DragEventArgs.DataIDataObject,我使用DataObject来简化我的测试代码。

2 个答案:

答案 0 :(得分:3)

我认为您正在寻找generics

 public class DataObject<T>
 {
      private T _data;
      public DataObject(T data)
      {
          _data = data;
      }

      public T GetData()
      {
          return _data;
      }
 }

然后你可以这样做:

 var data = new DataObject("abc");
 string result = data.GetData();

答案 1 :(得分:0)

我找到了让它运转的方法。它也适用于DragEventArgs.Data

DataObject data = new DataObject(typeof(String));
Type result = (Type)data.GetData(typeof(Type).GetType());

似乎typeof()返回RuntimeType类型的对象而不是Type。获取RuntimeType的唯一方法是致电typeof(ANY_CLASS).GetType()。我使用以下代码示例来解决这个问题。

string str1 = new Object().GetType().ToString();  //System.Object
string str2 = typeof(Object).ToString();  //System.Object
string str3 = typeof(Object).GetType().ToString();  //System.RuntimeType
string str4 = typeof(Type).ToString();  //System.Type
string str5 = typeof(Type).GetType().ToString();  //System.RuntimeType