如何在c#中传递和使用泛型对象?
我有多个方法,每个方法都返回一个对象如何在c#中传递和使用泛型对象?,c#,generics,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 (Te
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 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;
}
}
public T myCall(ref T myObj,string[]args)
{
webAPI myAPI=新的webAPI();
returnData=myAPI.callApi(“http://localhsot/api“,args,“POST”);
XmlSerializer serializer=新的XmlSerializer(typeof(myObj));
使用(TextReader=new StringReader(returnData))
{
myObj结果=(myObj)序列化程序。反序列化(读取器);
返回结果;
}
}
但当我把它放到VisualStudio中时,我得到一个错误,说“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;
}
}
public T myCall(字符串[]args)
{
webAPI myAPI=新的webAPI();
returnData=myAPI.callApi(“http://localhsot/api“,args,“POST”);
XmlSerializer serializer=新的XmlSerializer(typeof(T));
使用(TextReader=new StringReader(returnData))
{
T result=(T)序列化程序。反序列化(读取器);
返回结果;
}
}
然后通过传递类型作为泛型约束来调用它
var result = myCall<objA>(someArguments);
var result=myCall(someArguments);
顺便说一句(也是我的观点)
objA
不是一个好名字。你几乎做到了
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;
}
}
public T myCall(字符串[]args)
{
webAPI myAPI=新的webAPI();
returnData=myAPI.callApi(“http://localhsot/api“,args,“POST”);
XmlSerializer serializer=新的XmlSerializer(typeof(T));
使用(TextReader=new StringReader(returnData))
{
T result=(T)序列化程序。反序列化(读取器);
返回结果;
}
}
然后通过传递类型作为泛型约束来调用它
var result = myCall<objA>(someArguments);
var result=myCall(someArguments);
另一方面(也是我的观点)
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;
}
}
public T myCall(字符串[]args)
{
webAPI myAPI=新的webAPI();
returnData=myAPI.callApi(“http://localhsot/api“,args,“POST”);
XmlSerializer serializer=新的XmlSerializer(typeof(T));
使用(TextReader=new StringReader(returnData))
{
T result=(T)序列化程序。反序列化(读取器);
返回结果;
}
}
您应该从参数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;
}
}
public T myCall(字符串[]args)
{
webAPI myAPI=新的webAPI();
returnData=myAPI.callApi(“http://localhsot/api“,args,“POST”);
XmlSerializer serializer=新的XmlSerializer(typeof(T));
使用(TextReader=new StringReader(returnData))
{
T result=(T)序列化程序。反序列化(读取器);
返回结果;
}
}
@PoulBak这是一个误导性的评论。问题在于它以后的使用方式,而不是如何作为参数引用。@PoulBak这是一个误导性的评论。问题在于它以后的使用方式,而不是如何作为参数引用。哈哈,是的,我只是在这个网站上给它命名,以隐藏我的实际代码。:)后续问题:我正在尝试添加一个try-catch,以防出现问题。如何返回空对象“T”?我尝试过:T return=new T;但这给了我一个错误。@TheBigOnion-返回默认值(T)代码>谢谢你的帮助。我试试看。谢谢你的帮助。我会尝试一下。哈哈,是的,我只是在这个网站上把它命名为隐藏我的实际代码。:)后续问题:我正在尝试添加一个try-catch,以防出现问题。如何返回空对象“T”?我尝试过:T return=new T;但这给了我一个错误。@TheBigOnion-返回默认值(T)代码>谢谢你的帮助。我试试看。谢谢你的帮助。我会试一试。@Igor,thx,仅在前两种方法上找不到它=)@Igor,thx,仅在前两种方法上找不到它=)