2013-10-28 35 views
-1

我有一個靜態類的類:讀取文本文件,並更新到使用LINQ

static class ConfigurationDetails 
{ 
    public static string Server;// 
    public static string username;// 
    public static string password;// 
    public static string folder;//= 
    public static string sqlserver;// 
} 

,並用以下格式的文本文件:

Server = Server 
username = administrator 
password = "*****" 
folder = SPFolder 
sqlserver=127.8.9.1 

我想讀的文本文件,並更新類的價值,我這樣做:

List<string> c = File.ReadAllLines(@"C:\Config.txt").ToList(); 
ConfigurationDetails.Server = c[0]; 
ConfigurationDetails.username = c[1]; 
ConfigurationDetails.password = c[2]; 
ConfigurationDetails.folder = c[3]; 
ConfigurationDetails.sqlserver = c[4]; 

可能我寫代碼的方式可以提高很多,通過使用L INQ和Lambda。那麼有什麼建議?

+2

爲什麼不將配置存儲在app.config中,例如請參閱http://geekswithblogs.net/akraus1/articles/64871.aspx(使用['ConfigurationManager.AppSettings'](http://msdn.microsoft.com/zh-cn/library/system.configuration.configurationmanager.appsettings。 aspx)) –

+0

@TimS。客戶只是想要純文本文件,沒有xml或沒有配置,沒有用戶界面。稍後可以升級。 – Simsons

+3

工作代碼不屬於堆棧溢出。你應該在代碼審查網站上提問 –

回答

1

你確定LINQ是你問題的答案嗎?這實際上看起來像是T4 Templates的工作。

0

如果你真的想在你的代碼中的一些lambda表達式 - 如果你想用一個小LINQ檢查了這一點;-)

public void Init() 
    { 
     var lines = File.ReadAllLines(@"C:\Config.txt"); 
     Array.ForEach(lines, ParseConfigLine); 
    } 

    private static void ParseConfigLine(string line) 
    { 
     var separatorIndex = line.IndexOf('='); 
     if (separatorIndex < 1) 
     { 
      // you got malformed line without parameter name - raise an error 
      throw new .... 
     } 

     Action<string> setParameterAction = null; 
     string parameterName = line.Substring(0, separatorIndex).Trim(); 
     switch (parameterName) 
     { 
      case "Server": 
       setParameterAction = v => ConfigurationDetails.Server = v; 
       break; 
      case "username": 
       setParameterAction = v => ConfigurationDetails.UserName = v; 
       break; 
      case "password": 
       setParameterAction = v => ConfigurationDetails.Password = v; 
       break; 
      case "folder": 
       setParameterAction = v => ConfigurationDetails.Folder = v; 
       break; 
      case "sqlserver": 
       setParameterAction = v => ConfigurationDetails.SqlServer = v; 
       break; 
      default: 
       // unknown parameter - raise an error or ignore; 
       return; 
     } 

     string parameterValue = separatorIndex == line.Length - 1 
            ? string.Empty 
            : line.Substring(separatorIndex).Trim(); 

     setParameterAction(parameterValue); 
    } 
0

,你應該做這樣的事情:

static class ConfigurationDetails { 
    private static string[] cores = new string[5]; 
    public static string Server { // = iic-belfort 
    get { return cores[0];} 
    set { cores[0] = value;} 
    } 
    public static string username { // = administrator 
    get { return cores[1];} 
    set { cores[1] = value;} 
    } 
    public static string password { //= GARBLED 
    get { return cores[2];} 
    set { cores[2] = value;} 
    } 
    public static string folder { //= iicservices 
    get { return cores[3];} 
    set { cores[3] = value;} 
    } 
    public static string sqlserver { //=127.8.9.1 
    get { return cores[4];} 
    set { cores[4] = value;} 
    } 
    public static void Init(string[] coreData) { 
    cores = coreData; 
    } 
} 
//Then do something like this: 
var c = File.ReadAllLines(@"C:\Config.txt") 
      .Select(line=>line.Split('=')[1].Trim()).ToArray(); 
ConfigurationDetails.Init(c);