如何在c#中传递和使用通用对象?

时间:2018-09-13 15:36:12

标签: c# generics

我有多个方法,每个方法都返回一个对象。

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”是变量,但像类型一样使用。如果您有经验并愿意提供帮助,我将不胜感激。

1 个答案:

答案 0 :(得分:5)

你快到了

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不是一种类型的好名字。