2

私は単純な問題を抱えていますが、それを処理するための最良の方法がわかりません。

いくつかの異なる設定ファイルがあり、「path」パラメーターを受け取るGetDataメソッドがあります。

        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パラメータを渡して、その方法でオブジェクトから型を取得するようなことをするのが最善ですか?

ありがとう!

4

3 に答える 3

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; 
    } 
} 
于 2012-09-26T17:43:12.867 に答える
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;
    }
}
于 2012-09-26T17:43:48.827 に答える
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; 
    } 
} 
于 2012-09-26T17:57:32.240 に答える