C# 使用类名作为方法参数和返回类型

C# 使用类名作为方法参数和返回类型,c#,C#,我有一个扩展方法用于反序列化XDocument 我使用CarConfiguration作为此方法中的变量,但我有另一个类配置: public static CarConfiguration Deserialize(this XDocument xdoc) { XmlSerializer serializer = new XmlSerializer(typeof(CarConfiguration)); using (StringReader reader = new String

我有一个扩展方法用于反序列化
XDocument

我使用
CarConfiguration
作为此方法中的变量,但我有另一个类配置:

public static CarConfiguration Deserialize(this XDocument xdoc)
{
    XmlSerializer serializer = new XmlSerializer(typeof(CarConfiguration));

    using (StringReader reader = new StringReader(xdoc.ToString()))
    {
        CarConfiguration cfg = (CarConfiguration) serializer.Deserialize(reader);
        return cfg;
    }
}

class CarConfiguration 
{
    //car 
}

class BikeConfiguration 
{
    //bike 
}
因此,这里有两个问题:

  • 我可以使用类名作为此方法的参数吗?大概是这样的:

    static CarConfiguration Deserialize(this XDocument xdoc, class classname) {        
        var serializer = new XmlSerializer(typeof(classname));
    
    CarConfiguration x = xmlDocument.Deserialize<CarConfiguration>();
    
  • 我是否可以将此方法设置为所有必需类型的通用方法(
    CarConfiguration
    BikeConfiguration
    等)?我的意思是,例如,返回类型对输入类的依赖性:

    static <classname> Deserialize(this XDocument xdoc, class classname) {
    
    静态反序列化(此XDocument xdoc,类名){
    

  • 您问题中的关键词是
    generic
    ,因此您可以通过使用来实现这一点。例如:

    public static T Deserialize<T>(this XDocument xdoc)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(T));
    
        using (StringReader reader = new StringReader(xdoc.ToString()))
        {
            T cfg = (T) serializer.Deserialize(reader);
            return cfg;
        }
    }
    
    公共静态T反序列化(此XDocument xdoc)
    {
    XmlSerializer serializer=新的XmlSerializer(typeof(T));
    使用(StringReader=newStringReader(xdoc.ToString()))
    {
    T cfg=(T)序列化程序。反序列化(读取器);
    返回cfg;
    }
    }
    
    现在你这样称呼它:

    static CarConfiguration Deserialize(this XDocument xdoc, class classname) {        
        var serializer = new XmlSerializer(typeof(classname));
    
    CarConfiguration x = xmlDocument.Deserialize<CarConfiguration>();
    
    CarConfiguration x=xmlDocument.Deserialize();
    
    太好了!我知道它一定很简单,但不知道该用什么:)谢谢。