![](/img/trans.png)
[英]How to use an object of a generic class inside a generic class in 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.