2011-04-11 31 views
5

Aşağıdaki iki argümanı kullanan bir yöntem yazmaya çalışıyorum:Bir Argüman Olarak DataType Gönderiliyor?

ColumnToSort 
ColumnType 

Bunu yapabilmem için iki şeyi yorumlamak, aynı şeyi karşılaştırmaktan farklı bir sonuç verebilir. bir sayı olarak. Örneğin

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

Yani, temel olarak, bir yöntem argümanı olarak çift veya dize veri türü göndermek mümkün olmak istiyorum, ama bunu nasıl yapacağımı bilmiyorum, ama C# içinde mümkün olması gereken bir şey gibi görünüyor .

Yöntemimin nasıl görünmesini istiyorum:

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 
    } 
} 

Nasıl çağrılır:

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

Biz bundan çok daha fazla bilgi kurşun gidiyoruz .. .. yöntemlerin nasıl görünüyor, kodu nasıl arıyorsun? –

+0

OP'yi güncellerken bana bir dakika verin. – sooprise

+0

Sanırım muhtemelen jeneriklerden faydalanabilirsiniz. YourFunc (object OtherCriticalArgument) gibi bir şey. Düzenlemenizi görmek için merak ve bu geçerli olacaktır. –

cevap

6

benim yöntem gibi görünmek istiyorum ne

. gibi bu

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

ve

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

veya

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

Ah, görüyorum, typeof (TYPE) kullanarak bunu geçmek zorundasınız, Type.TYPE (ki, açıkça işe yaramadı) deniyordum. Teşekkürler!+1 – sooprise

+0

t'yi kullanmaya çalıştığımda "foo" nun içinde şunu elde ederim: "t tür veya ad alanı adı bulunamadı (kullanma yönergesi veya montaj referansı eksik misiniz?"). Benim kodum: (t) listView.Items [i] .SubItems [columnToSort] .Sonra, değerinimi yapmaya çalışıyorum. – sooprise

+0

Çalışma zamanında dinamik bir yayın yapmak için, döküm türü derleme zamanında bilinemediğinden (yani tanımladığınız şey), çalışma zamanı yansımasını kullanmanız gerekir. Bunun nasıl yapılacağını açıklayan bir yanıt var (http://social.msdn.microsoft.com/forums/en-US/csharplanguage/thread/fe14d396-bc35-4f98-851d-ce3c8663cd79, ikinci gönderi). –

1

Bu hedef burada ne tam olarak belli değil, ama Type tipi olabilecek aradığınız çağrı:

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

DoSomethingUseful(fooObject.GetType()); 

cou Of Benim yöntemi adı yanıltıcıdır, çünkü yararlı, bir şey yapmak için neredeyse imkansızdır ama umarım bu aradığınız bilgilerdir.

0

Bunun gibi Sütun kendisi bir başvuru pass:

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

Cheers, MSK

1

Sen eşdeğer ilaç kullanımıyla düşünebilirsiniz. Ardından, arayınız ve kendiliğinden türünü belirleyelim.

Ayrıca bunu bir değer türü olduğundan emin olmak istiyorsanız, T, örneğin ne olabilir kısıtlamak isteyebilirsiniz
int i=1; 
InsertRow(i,/*column/*); 

, where T:structMore

İlgili konular