2017-10-30 4 views
0

DataObject 인스턴스를 사용하여 Type을 데이터로 전달해야합니다. 다음 코드를 시도했지만 결과는 null입니다.Type 개체가 데이터 인 C# 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를 사용할 때 문제가 해결되지 않을 수도 있습니다. 그러나 두 문제 모두 동일한 문제를 경험하고 DataObject를 사용하여 솔루션을 찾으면 DragEventArgs 문제를 해결할 수 있다고 생각했습니다. 명백한 문제를 사용하여 다른 질문을해야합니까? 어쨌든, 왜 코드가 어떤 경우에 작동하지 않는지 이해할 수 없습니다. – 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()); 

그것은 보인다 유형 RuntimeType보다는 Typetypeof() 반환 객체. 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