簡體   English   中英

如何使方法返回泛型?

[英]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/

盡可能避免switchif對於這個問題,在多態代碼。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM