我有一个简单的问题,但我不确定处理它的最佳方法是什么。
我有几个不同的设置文件,我有一个GetData方法,它接收'path'参数。
public static CountriesInfo GetDataFromFile(string path)
{
if (!File.Exists(path))
{
return null;
}
try
{
CountriesInfo tempData = new CountriesInfo();
System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(tempData.GetType());
StreamReader tempReader = new StreamReader(path);
tempData = (CountriesInfo)x.Deserialize(tempReader);
tempReader.Close();
return tempData;
}
catch
{
return null;
}
}
重构这个以支持传递对象类型,然后从方法中进行强制转换的最佳方法是什么?现在返回类型(在这个例子中)是CountriesInfo,但是我不希望有几个相同的函数,唯一的区别是返回类型和方法中的转换。
最好做一些事情,例如传递ref参数并从那个方向获取对象的类型吗?
谢谢!
答案 0 :(得分:7)
改为使用通用方法:
public static T GetDataFromFile<T>(string path) where T : class
{
if (!File.Exists(path))
{
return null;
}
try
{
System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(typeof(T));
StreamReader tempReader = new StreamReader(path);
T result = (T)x.Deserialize(tempReader);
tempReader.Close();
return result;
}
catch
{
return null;
}
}
答案 1 :(得分:3)
public static T GetDataFromFile<T>(string path) where T : class
{
if (!File.Exists(path))
{
return null;
}
try
{
System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(typeof(T));
using(StreamReader tempReader = new StreamReader(path))
{
return (T)x.Deserialize(tempReader);
}
}
catch
{
return null;
}
}
答案 2 :(得分:0)
最简单的方法是使用Convert.ChangeType方法并返回一个动态类型尝试这样的事情:
public static dynamic GetDataFromFile(string path, Type convertType)
{
if (!File.Exists(path))
{
return null;
}
try
{
CountriesInfo tempData = new CountriesInfo();
System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer (tempData.GetType());
StreamReader tempReader = new StreamReader(path);
tempData = (CountriesInfo)x.Deserialize(tempReader);
tempReader.Close();
return Convert.ChangeType(CountriesInfo, convertType);
}
catch
{
return null;
}
}