[英]How to make method to return generic type?
我有一個名為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),而不是對象?
做這個:
public T PolimorphProperty<T>(string key)
{
return (T) objectInstanceHere;
}
用法示例:
int i = PolimorphProperty<int>("somekey");
這支持http://www.antiifcampaign.com/
盡可能避免switch
, if
對於這個問題,在多態代碼。
public T PolimorphProperty<T>(string key, T how)
{
//todo
}
C#中的任何type
實際上都是對象。
根據您對問題的了解,您可以通過以下方式調用方法:
PolimorpthProperty(key, RetType.SomeType)
該方法返回一個對象。 您應該以這種方式使用它:
int key = (int)PolimorthProperty(key, RetType.RetInt);
這稱為拆箱 。
怎么樣,請考慮您原來的“ PolimorphProperty”實現仍保留在您的項目中,並添加以下內容:
public TType PolimorphProperty<TType>(string key, RetType how)
{
return (TType)PolimorphProperty(key, how);
}
如果我理解正確,那么您正在尋找這樣的東西:
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獲取不同的對象,則無論如何都將不得不打開類型,因為除非您的集合支持某種類型的對象(通常是這樣),否則編譯器不會知道該怎么辦。
在這種情況下,請檢查此問題 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.