2011-04-11 10 views
5

다음 두 개의 인수를 사용하는 메서드를 작성하려면 노력하고있어 :인수로 데이터 유형 보내기?

ColumnToSort 
ColumnType 

이 작업을 수행 할 수있게하려는 이유는 두 가지를 해석하는 것이 문자열이 동일한 두 가지를 비교하는 것과 다른 결과를 줄 수 있기 때문입니다 숫자 같은 것. 예를 들어

String: "10" < "2" 
Double: 10 > 2 

기본적으로 double 또는 string 데이터 형식을 메서드 인수로 보낼 수 있어야하지만이 방법은 모르지만 C# .

부록 :

내 방법을 다음과 같이 표현합니다.

InsertRow(customDataObj data, int columnToSort, DataType dataType){ 
    foreach(var row in listView){ 
     var value1 = (dataType)listView.Items[i].SubItems[columnToSort]; 
     var value2 = (dataType)data.Something; 
     //From here, it will find where the data object needs to be placed in the ListView and insert it 
    } 
} 

호출 방법 :

I think the above provides enough of an explanation to understand how it will be called, if there are any specific questions, let me know. 
+0

우리는이보다 더 많은 정보를 이끌거야 .. .. 당신의 메소드는 어떻게 생겼지? 코드를 어떻게 부르는거야? –

+0

영업 시간을 업데이트하는 동안 잠시만 기다려주십시오. – sooprise

+0

아마도 제네릭을 사용할 수있는 것처럼 들릴 수 있습니다. YourFunc (개체 OtherCriticalArgument)과 같은 것입니다. 호기심이 귀하의 개정을보고 적용하는 경우. –

답변

6

내 방법은 같이하고 싶은

. 같은이

void foo(object o, Type t) 
{ 
... 
} 

Double d = 10.0; 
foo(d, d.GetType()); 

또는

foo(d, typeof(Double)); 
+0

아아, typeof (TYPE)을 사용하여 전달해야합니다. Type.TYPE (분명히 작동하지 않음)을 시도했습니다. 감사!+1 – sooprise

+0

"foo"안에 t를 사용하려고하면 "형식 또는 네임 스페이스 이름 't'을 (를) 찾을 수 없습니다 (사용 지시문이나 어셈블리 참조가 누락 되었습니까?)". 내 코드 : (t) listView.Items [i] .SubItems [columnToSort]. 텍스트, 내 가치관을 캐스팅하려고합니다. – sooprise

+0

런타임에 동적 형변환을 수행하려면 컴파일 타임에 형 변환을 알 수 없으므로 런타임 리플렉션을 사용해야합니다. 이를 수행하는 방법을 설명하는 답변이 여기에 있습니다 (http://social.msdn.microsoft.com/forums/en-US/csharplanguage/thread/fe14d396-bc35-4f98-851d-ce3c8663cd79, 두 번째 게시). –

1

그것은 당신의 목표는 여기에 무엇을 완전히 명확하지 않다,하지만 Type 유형이있을 수 있습니다 무엇을 당신이 찾고있는 전화 :

void DoSomethingUseful(Type foo) 
{ 
    switch(typeof(foo)) 
    { 
     case typeof(string): 
      // something 
      break; 
     case typeof(double): 
      // something else 
      break; 
    } 
} 

DoSomethingUseful(fooObject.GetType()); 

cou rse 내 메서드 이름은 오해의 소지가 있습니다. 실제로 아무 것도 할 수 없기 때문에 유용하지만이 정보는 사용자가 찾고있는 정보입니다.

0

그냥 같이 열 자체에 대한 참조를 전달 :

protected void DoSort(DataColumn dc) 
     { 
     string columnName = dc.ColumnName; 
     Type type = dc.DataType; 
     } 

건배, CEC를

1

당신은 제네릭을 사용하는 것이 좋습니다.

InsertRow<T>(T data, int columnToSort){ 
    foreach(var row in listView){ 
     var value1 = (T)listView.Items[columnToSort].SubItems[columnToSort]; 
     var value2 = data; 
     //From here, it will find where the data object needs to be placed in the ListView and insert it 
     if(typeof(T)==typeof(string)) 
     { 
      //do with something wtih data 
     } 
     else if(typeof(T)==typeof(int)) 
     { 
      //do something else 
     } 
    } 
} 

그런 다음 호출하여 유형을 알아냅니다.

또한 당신이 값 형식입니다 있는지 확인하려면 T는 예를 들어, 할 수있는 것을 제한 할 수 있습니다
int i=1; 
InsertRow(i,/*column/*); 

, where T:structMore