Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/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#_C# 4.0 - Fatal编程技术网

C#-接受任何类型参数的方法(重用现有方法)

C#-接受任何类型参数的方法(重用现有方法),c#,c#-4.0,C#,C# 4.0,我有一个方法,serializetoxml,它接受类型为obj1的对象作为其参数: class Program { static void Main(string[] args) { obj1 myobj = new obj1(); serializetoxml(myobj); } } public class obj1 { public string a { get; set; } public int b {

我有一个方法,
serializetoxml
,它接受类型为
obj1
的对象作为其参数:

class Program
{
    static void Main(string[] args)
    {
        obj1 myobj = new obj1();
        serializetoxml(myobj);    
    }
}

public class obj1
{
    public string a { get; set; }
    public int b { get; set; }
    public bool c { get; set; }
}

public static void serializetoxml(obj1 myobj)
{
    XmlSerializer myserializer = new XmlSerializer(typeof(obj1));
    TextWriter mywriter = new StreamWriter("C:\\my.xml");
    myserializer.Serialize(mywriter, myobj);
    mywriter.Close();
}
public static void serializetoxml<T>(T myobj)
{
    XmlSerializer myserializer = new XmlSerializer(typeof(T));
    TextWriter mywriter = new StreamWriter("C:\\my.xml");
    myserializer.Serialize(mywriter, myobj);
    mywriter.Close();
}
现在我有一个类,
obj2
,我想将其作为参数传递

public class obj2
{
    public int a { get; set; }
    public bool b { get; set; }
    public List<string> c { get; set; }
}
添加类型参数:

class Program
{
    static void Main(string[] args)
    {
        obj1 myobj = new obj1();
        serializetoxml(myobj);    
    }
}

public class obj1
{
    public string a { get; set; }
    public int b { get; set; }
    public bool c { get; set; }
}

public static void serializetoxml(obj1 myobj)
{
    XmlSerializer myserializer = new XmlSerializer(typeof(obj1));
    TextWriter mywriter = new StreamWriter("C:\\my.xml");
    myserializer.Serialize(mywriter, myobj);
    mywriter.Close();
}
public static void serializetoxml<T>(T myobj)
{
    XmlSerializer myserializer = new XmlSerializer(typeof(T));
    TextWriter mywriter = new StreamWriter("C:\\my.xml");
    myserializer.Serialize(mywriter, myobj);
    mywriter.Close();
}

将该方法移动到静态类,并使其成为静态类,如下所示:

internal static class Extensions {
    public static void SerializeToXml<T>(this T myobj)
        {
            XmlSerializer myserializer = new XmlSerializer(typeof(T));
            TextWriter mywriter = new StreamWriter("C:\\my.xml");
            myserializer.Serialize(mywriter, myobj);
            mywriter.Close();
        }
}
内部静态类扩展{
公共静态无效序列化XML(此T myobj)
{
XmlSerializer myserializer=新的XmlSerializer(typeof(T));
TextWriter mywriter=新的StreamWriter(“C:\\my.xml”);
序列化(mywriter,myobj);
mywriter.Close();
}
}

现在,您可以像使用实例方法一样使用它。您需要将您的
扩展
类放入同一名称空间,或者使用指令为它添加一个

确实没有问题。只需使序列化方法在泛型类型上工作即可。 请参阅堆栈溢出问题。

尝试以下操作

public static void serializetoxml(object myobj) {
    XmlSerializer myserializer = new XmlSerializer(myobj.GetType());
    TextWriter mywriter = new StreamWriter("C:\\my.xml");
    myserializer.Serialize(mywriter, myobj);
    mywriter.Close();
}
两种选择:

  • 泛型:
    Serialize(T obj)
    typeof(T)
  • 对象:
    Serialize(objectobj)
    obj.GetType()

基于痛苦的经历,我实际上更喜欢第二种序列化,但两者都是有效的。

Wow,似乎非常有用。但对于C#的新手来说,这毫无意义。我已经离开编程圈好几年了。但是来自C语言和一些Java甚至PHP。但一切似乎都死了,所以我放弃了。但我现在正在编写C#程序,因为邪恶的苹果之神决定驱逐Adobe Flash,因此AS3不见了。。。
public static void serializetoxml(object myobj)
{
    XmlSerializer myserializer = new XmlSerializer(obj1.GetType());
    TextWriter mywriter = new StreamWriter("C:\\my.xml");
    myserializer.Serialize(mywriter, myobj);
    mywriter.Close();
}
public static void serializetoxml(object myobj) {
    XmlSerializer myserializer = new XmlSerializer(myobj.GetType());
    TextWriter mywriter = new StreamWriter("C:\\my.xml");
    myserializer.Serialize(mywriter, myobj);
    mywriter.Close();
}
public static void serializetoxml(object myobj)
{
    XmlSerializer myserializer = new XmlSerializer(obj1.GetType());
    TextWriter mywriter = new StreamWriter("C:\\my.xml");
    myserializer.Serialize(mywriter, myobj);
    mywriter.Close();
}