我需要使用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.Data
是IDataObject
,我使用DataObject
来简化我的测试代码。
答案 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