2012-07-15 34 views
2

我有一個名爲config的類,其中一個字符串字段名爲key如何使方法返回泛型類型?

當我應用該類的GET屬性時,該屬性必須在不同類型(Int或bool或String)中返回一個變量鍵。

我實現它如下:

public enum RetType {RetInt, RetBool, RetString}; 
    ... 
    public object PolimorphProperty(string key, RetType how) 
    { 
     get 
    { 
     switch (how) 
     { 
     case RetType.RetInt: 
      ...; 
     case RetType.RetBool: 
      ...; 
     case RetType.RetString: 
      ...; 
     } 
    } 
} 

但是PolimorphProperty回報問題對象類型。

請你知道我在代碼中改變了什麼以獲得合適的類型(int,bool,string), 不是對象嗎?

+1

[Making a generic property]的可能的重複(http://stackoverflow.com/questions/271347/making-a-generic-property) – 2012-07-15 12:36:31

回答

1

這樣做:

public T PolimorphProperty<T>(string key) 
{ 
    return (T) objectInstanceHere; 
} 

用例:

int i = PolimorphProperty<int>("somekey"); 

而且這個支持http://www.antiifcampaign.com/

儘可能地避免switchif在這個問題上,在一個多態代碼。

0
public T PolimorphProperty<T>(string key, T how) 
{ 
    //todo 
} 
+2

那麼,'T how'有什麼意義呢? – sloth 2012-07-15 12:27:12

+1

我表明你可以使用通用的方法參數 – 2012-07-15 12:29:25

+0

在這種情況下,第二parametre可以在不影響 – 2012-07-15 12:30:59

0

不限type在C#是實際上的對象。
從我所瞭解的問題中,您可以這樣稱呼您的方法:
PolimorpthProperty(key, RetType.SomeType)
該方法返回一個對象。您應該這樣使用它:
int key = (int)PolimorthProperty(key, RetType.RetInt);
這叫做Unboxing

+0

哎呀,不知道你在尋找一個通用的解決方案... – 2012-07-15 12:26:29

0

這樣吧,考慮到你原來實行的 'PolimorphProperty' 保持即時你的項目,你補充一點:

public TType PolimorphProperty<TType>(string key, RetType how) 
{ 
    return (TType)PolimorphProperty(key, how); 
} 
0

如果我理解正確,你正在尋找的東西是這樣的:

public T GenericMethod<T>(string key) 
{ 
    var ret = new object(); // Retrieve object from whatever... 
    return (T) ret; 
} 

public void UsageExample() 
{ 
    int typedResult = GenericMethod<int>("myKey"); 
} 

如果你想獲取基礎上,T型不同的對象,不同的邏輯,比你必須開啓類型,因爲除非你的集合支持某些類型的對象(他們通常會這樣做),編譯器不知道該怎麼做。
在這種情況下,請檢查此question