Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c#中传递和使用泛型对象?_C#_Generics - Fatal编程技术网

如何在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,仅在前两种方法上找不到它=)