读取文本文件并使用 LINQ 更新到类

本文关键字:LINQ 更新 取文本 文件 读取 | 更新日期: 2023-09-27 18:37:22

我有一个静态类:

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];

也许我编写代码的方式可以通过使用 LINQ 和 Lambda 进行很多改进。那么有什么建议吗?

读取文本文件并使用 LINQ 更新到类

您确定 LINQ 是这里问题的答案吗?这实际上看起来像是 T4 模板的工作。

如果你真的想要在你的代码中有一些lambda——看看这个;-)

    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);
    }

如果你想使用一点LINQ,你应该做这样的事情:

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);