如何概括一个方法

mrd*_*mrd 1 c#

我有一个方法,我想概括.我想对任何对象类型使用以下Deserialize函数,如belew:

ExportDefinition _expDefinition = new ExportDefinition("a.ini");
DeliveryDefinition _delDefinition = new DeliveryDefinition("b.ini");

ExportDefinition expDef = Deserialize(_expDefinition);
DeliveryDefinition devDef = Deserialize(_delDefinition);
Run Code Online (Sandbox Code Playgroud)

public SomeType Deserialize(SomeType?? tp)  // What should I use instead of SomeType?
{     
    try
    {
        FileStream readFileStream = new FileStream(definitionFile, FileMode.Open, FileAccess.Read, FileShare.Read);

        XmlSerializer serializerObj = new XmlSerializer(typeof(tp));
        tp loadedObj = (tp)serializerObj.Deserialize(readFileStream);
        readFileStream.Close();
     }
     catch (Exception ex)
     {
        throw new Exception(ex.Message);
     }

     return loadedObj;
}
Run Code Online (Sandbox Code Playgroud)

任何想法,如何实现这一目标?

ken*_*n2k 6

使用泛型:

    public T Deserialize<T>(string filePath)
    {
        Stream stream = null;

        try
        {
            stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
            XmlSerializer serializerObj = new XmlSerializer(typeof(T));

            return (T)serializerObj.Deserialize(stream);
        }
        catch (Exception)
        {
            throw;
        }
        finally
        {
            if (stream != null)
            {
                stream.Close();
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

基于Marc Gravell有用评论的非通用版本:

public object Deserialize(string filePath, Type type)
{
    Stream stream = null;

    try
    {
        stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
        XmlSerializer serializerObj = new XmlSerializer(type);

        return serializerObj.Deserialize(stream);
    }
    catch (Exception)
    {
        // Put something useful here
        throw;
    }
    finally
    {
        if (stream != null)
        {
            stream.Close();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 是否需要参数tp? (3认同)
  • @Ric同意,我编辑并清理了OP写的代码. (2认同)