2017-05-31 59 views
0

我有一個類我在另一篇文章,我試圖修改中。XML輸出類泛型類

using System; 
using System.IO; 

namespace Misc 
{ 
    internal class ConfigManager 
    { 

    private string _sConfigFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, string.Format("{0}.xml", AppDomain.CurrentDomain.FriendlyName)); 
    private Config m_oConfig = new Config(); 

    public Config MyConfig 
    { 
     get { return m_oConfig; } 
     set { m_oConfig = value; } 
    } 

    // Load configuration file 
    public void LoadConfig() 
    { 
     if (System.IO.File.Exists(_sConfigFileName)) 
     { 
     System.IO.StreamReader srReader = System.IO.File.OpenText(_sConfigFileName); 
     Type tType = m_oConfig.GetType(); 
     System.Xml.Serialization.XmlSerializer xsSerializer = new System.Xml.Serialization.XmlSerializer(tType); 
     object oData = xsSerializer.Deserialize(srReader); 
     m_oConfig = (Config)oData; 
     srReader.Close(); 
     } 
    } 

    // Save configuration file 
    public void SaveConfig() 
    { 
     System.IO.StreamWriter swWriter = System.IO.File.CreateText(_sConfigFileName); 
     Type tType = m_oConfig.GetType(); 
     if (tType.IsSerializable) 
     { 
     System.Xml.Serialization.XmlSerializer xsSerializer = new System.Xml.Serialization.XmlSerializer(tType); 
     xsSerializer.Serialize(swWriter, m_oConfig); 
     swWriter.Close(); 
     } 
    } 

    } 
} 

我想傳入一個X類型的對象並保存它。在同樣的前提下,我想傳入一個類型並讓它返回X類型的對象。現在,它被硬編碼爲使用Config。所以,如果有一種方法的類對象通過(?),那麼我想它保存爲對象和/或返回該對象的它。

這可能嗎?如果是這樣,我將如何去做這件事?

回答

0

使用通用:

internal class ConfigManager<T> 
{ 
    private string _fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, string.Format("{0}.xml", AppDomain.CurrentDomain.FriendlyName)); 
    private T _config; 
    private XmlSerializer serializer = new XmlSerializer(typeof(T)); 

    public T MyConfig 
    { 
     get { return _config; } 
     set { _config = value; } 
    } 

    public void LoadConfig() 
    { 
     if (File.Exists(_fileName)) 
     { 
      using (var reader = File.OpenText(_fileName)) 
      { 
       _config = (T)serializer.Deserialize(reader); 
      } 
     } 
    } 

    public void SaveConfig() 
    { 
     using (var writer = File.CreateText(_fileName)) 
     { 
      serializer.Serialize(writer, _config); 
     } 
    } 
} 

用法:

var man = new ConfigManager<Foo>(); 
+0

很棒! tyvm! – SomeoneSpecial

0

基本上,我們就需要使它與泛型工作。所以,我們給它一個類型變量開始,替換T每次使用類Config的:

internal class Manager<T> 
{ 
     private T m_oObj;  // etc 

接下來,我就做一個方法;你可以做其餘的事情。 (我刪除了顯式命名空間,因爲它們很醜)

using System.IO; 
using System.Xml.Serialization; 

public void LoadConfig<T>() 
{ 
    if (File.Exists(_sConfigFileName)) 
    { 
    var srReader = File.OpenText(_sConfigFileName); 
    var xsSerializer = new XmlSerializer(typeof(T)); 
    var oData = xsSerializer.Deserialize(srReader); 
    m_oObj = (T)oData; 
    srReader.Close(); 
    } 
}