簡體   English   中英

如何在C#中傳遞和使用通用對象?

[英]How to pass and use a generic object in c#?

我有多個方法,每個方法都返回一個對象。

public objA myCall(string[] args)
{           
    webAPI myAPI = new webAPI();
    returnData = myAPI.callApi("http://localhsot/api", args , "POST");

    XmlSerializer serializer = new XmlSerializer(typeof(myObj));

    using (TextReader reader = new StringReader(returnData))
    {
        objA result = (objA)serializer.Deserialize(reader);

        return result;
    }
}

public objB myCall(string[] args)
{           
  webAPI myAPI = new webAPI();
  returnData = myAPI.callApi("http://localhsot/api", args , "POST");

  XmlSerializer serializer = new XmlSerializer(typeof(myObj));

  using (TextReader reader = new StringReader(returnData))
  {
      objB result = (objB)serializer.Deserialize(reader);

      return result;
  }
}

我想做的就是使用泛型將它們合並為一種方法。 這樣,我可以傳遞我想要返回的對象。 我以前從未使用過泛型,因此需要一些幫助。 這是我嘗試過的:

public T myCall<T>(ref T myObj, string[] args)
{           
  webAPI myAPI = new webAPI();
  returnData = myAPI.callApi("http://localhsot/api", args , "POST");

  XmlSerializer serializer = new XmlSerializer(typeof(myObj));

  using (TextReader reader = new StringReader(returnData))
  {
      myObj result = (myObj)serializer.Deserialize(reader);

      return result;
  }
}

但是,當我將其放入Visual Studio時,我得到一個錯誤,說“ myObj”是一個變量,但像類型一樣使用。 如果您有此經驗並願意提供幫助,我將不勝感激。

你快到了

public T myCall<T>(string[] args)
{           
  webAPI myAPI = new webAPI();
  returnData = myAPI.callApi("http://localhsot/api", args , "POST");

  XmlSerializer serializer = new XmlSerializer(typeof(T));

  using (TextReader reader = new StringReader(returnData))
  {
      T result = (T)serializer.Deserialize(reader);

      return result;
  }
}

然后通過將類型作為通用約束傳遞來調用它。

var result = myCall<objA>(someArguments);

objA (也是我的觀點), objA不是類型的好名字。

您應該從參數myObj刪除並將其在方法主體中更改為T如下所示

public T myCall<T>(string[] args)
{           
  webAPI myAPI = new webAPI();
  returnData = myAPI.callApi("http://localhsot/api", args , "POST");

  XmlSerializer serializer = new XmlSerializer(typeof(T));

  using (TextReader reader = new StringReader(returnData))
  {
      T result = (T)serializer.Deserialize(reader);

      return result;
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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