Mar*_*ram 2 c# overloading return-value
全部 - 我的一个课程中有这两种方法:
public static void DeSerializeFromXml(out cDBData db, string pathToXML)
{
using (XmlTextReader reader = new XmlTextReader(pathToXML))
{
XmlSerializer ser = new XmlSerializer(typeof(cDBData));
db = (cDBData)ser.Deserialize(reader);
}
}
public static void DeSerializeFromXml(out cDatabases db, string pathToXML)
{
using (XmlTextReader reader = new XmlTextReader(pathToXML))
{
XmlSerializer ser = new XmlSerializer(typeof(cDatabases));
db = (cDatabases)ser.Deserialize(reader);
}
}
Run Code Online (Sandbox Code Playgroud)
它们工作正常,但我想知道为什么我不能根据方法的返回类型创建方法重载.我以为我读到这可能在某个地方,但我显然是错的,因为它不起作用:
public static cDBData DeSerializeFromXml(string pathToXML)
{
cDBData db;
using (XmlTextReader reader = new XmlTextReader(pathToXML))
{
XmlSerializer ser = new XmlSerializer(typeof(cDBData));
db = (cDBData)ser.Deserialize(reader);
}
return db;
}
public static cDatabases DeSerializeFromXml(string pathToXML)
{
cDatabases db;
using (XmlTextReader reader = new XmlTextReader(pathToXML))
{
XmlSerializer ser = new XmlSerializer(typeof(cDatabases));
db = (cDatabases)ser.Deserialize(reader);
}
return db;
}
Run Code Online (Sandbox Code Playgroud)
感谢您的深思熟虑的回复
感谢dlev,这是最终的解决方案
public static T DeSerializeFromXml<T>(string pathToXML)
{
T db;
using (XmlTextReader reader = new XmlTextReader(pathToXML))
{
XmlSerializer ser = new XmlSerializer(typeof(T));
db = (T)ser.Deserialize(reader);
}
return db;
}
public static void SerializeToXml<T>(T db, string pathToXML)
{
using (var fileStream = new FileStream(pathToXML, FileMode.Create))
{
var ser = new XmlSerializer(typeof(T));
ser.Serialize(fileStream, db);
}
}
Run Code Online (Sandbox Code Playgroud)
我想在搜索警察关闭这个问题之前发布这些内容.
你不能这样做,因为C#根本不支持那种重载.您可以通过使方法通用并返回泛型参数类型来实现类似的效果:
public static T DeSerializeFromXml<T>(string pathToXML)
{
T db;
using (XmlTextReader reader = new XmlTextReader(pathToXML))
{
XmlSerializer ser = new XmlSerializer(typeof(T));
db = (T)ser.Deserialize(reader);
}
return db;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以调用这样的函数:
DeSerializeFromXml<cDatabases>(pathToXml);
Run Code Online (Sandbox Code Playgroud)
虽然这不是你想要的,但它确实有一个好处,只需要一个方法.