2011-06-01 16 views
1
class Country 
{ 
    //props 
} 

DataContext的是具有方法Set(),它像如下C#:方法預計鍵入

dataContext.Set<Country>().SomeThing(); 

工作正常的可變,但我不希望硬編碼類型=國家,而我想提取自變量如

function MyFunction(object o) 
{ 
    dataContext.Set</*something_here*/>().SomeThing(); 
    //some how extract type from variable o 
} 
+0

爲什麼你不想要硬編碼的國家嗎?它會改變嗎?它將以何種方式改變?它將如何改變?在你的例子中,'o'甚至不是'Country'類型,所以它不像改變'o'的類型,應該以任何方式改變'Set'方法的類型參數。 – 2011-06-01 15:09:11

+0

我們解決了您的問題嗎? – Nik 2011-06-01 16:47:43

+0

如果我們解決了您的問題,您能接受答案嗎? – Nik 2011-06-03 02:45:24

回答

10

鍵入瞭如何:

void MyFunction<T> (T o) 
{ 
    dataContext.Set<T>().SomeThing(); 
} 

然後調用它:

MyFunction<County> (county_object); 
+1

+1 *相同*答案,比我快29秒。 ;-) – 2011-06-01 15:09:10

+0

哈哈,感謝代表。 – Nik 2011-06-01 15:09:44

+2

這可以縮短爲'MyFunction(country_object);'。 – 2011-06-01 15:14:40

3

除了其他的答案,你可以用一些反射弄虛作假做到這一點。基本上,它會像這樣煮沸:

  1. 找到您的set方法的MethodInfo對象。
  2. MakeGenericType該方法信息與o.GetType()
  3. 調用該方法,然後調用SomeThing方法。

想在這裏從存儲器代碼這一點,所以請原諒任何代碼錯誤:

var setMethod = dataContext.GetType().GetMethods().First(x => x.Name == "Set"); 

var genericVersion = setMethod.MakeGenericType(o.GetType()); 

var result = genericVersion.Invoke(dataContext, null) as WhateverSetReturns; 

result.SomeThing();