2017-10-30 3 views
0

TypeをDataObjectインスタンスを使用してデータとして渡す必要があります。次のコードを試しましたが、結果はnullです。C#Typeオブジェクトをデータとして持つDataObject

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

私は次のようなことをしようとしていますが、StringオブジェクトではなくTypeオブジェクトを使用しています。

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

DataObjectを使用してTypeオブジェクトを渡すことができない理由は何ですか?

--- --- EDIT1

私は実際にDragEventArgs.Data.GetData方法はnullを返す理由を把握するSystem.Windows.DataObjectを使用しています。 DragEventArgs.DataIDataObjectで、私はDataObjectを使用してテストコードを簡素化しています。

+0

このテストが有効かどうかわかりません。 DragEventArgs.DataはIDataObjを実装しているだけで、DataObjectもそうしているので、まったく同じように動作することを暗示することはできません。 – Fildor

+0

[GetDataPresent](https://msdn.microsoft.com/en-us/library/1yc0tt01(v = vs.110).aspx)を試しましたか? – Fildor

+0

あなたはおそらく、DataObjectで私の問題を解決するDragEventArgsを使用して1つを解決できない場合があります。しかし、私は両方とも同じ問題を経験し、DragObjectArgsの問題を解決できると思っていました。DataObjectを使って解決策を見つけた場合です。明示的な問題を使って別の質問をするべきですか?とにかく、なぜコードがどのような場合でも動作しないのか分かりません。 – MatrixRonny

答えて

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(); 
+0

私はあなたのコードでいくつかのテストを行い、期待通りに動作しますが、それは問題ではありません。私の最初の編集を見てください。 – MatrixRonny

+1

それはまったく違うことです。あなたは最初にそれを言及していたはずです。 –

0

私はそれを操作できるようにする方法を見つけました。また、DragEventArgs.Dataで動作します。

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

typeof()というよりも、TypeタイプRuntimeTypeのオブジェクトを返すようです。 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 
関連する問題