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();
}