我目前正在编写一些软件,我必须从外部文件中加载很多列名。通常我会用一些JSON来做这件事,但出于用户友好的原因,我现在不能这样做。我需要使用一个对用户可读的文本文件,并包含很多注释。
所以我创建了自己的文件来保存所有这些值。
现在,当我在我的软件中导入这些值时,我基本上逐行遍历我的配置文件,如果它与我随后解析的参数匹配,我会检查每一行。但是这样我最终得到了一个带有非常重复代码的大代码块,我想知道是不能以某种方式简化它,以便每一次检查只需一行。
以下是我目前正在使用的代码:
if (line.Contains("[myValue]"))
{
myParameter = line.Replace("[myValue]", string.Empty).Trim();
}
我知道使用Linq你可以简单地将它们放在一行中,我不确定它是否适用于这种情况?
感谢您的帮助! 肯尼斯
答案 0 :(得分:4)
为什么不在这段代码经常重复的情况下创建一个方法:
void SetParameter(string line, string name, ref string parameter)
{
if (line.Contains(name))
{
parameter = line.Replace(name, string.Empty).Trim();
}
}
SetParameter(line, "[myValue]", ref myParameter);
如果您想避免同时调用Replace
和Contains
,这可能是一个好主意,您也可以致电Replace
:
void SetParameter(string line, string name, ref string parameter)
{
var replaced = line.Replace(name, string.Empty);
if (line != replaced)
{
parameter = replaced.Trim();
}
}
答案 1 :(得分:0)
试试这种方式(三元):
myParameter = line.Contains("[myValue]")?line.Replace("[myValue]", string.Empty).Trim():myParameter;
实际上,
line.IndexOf
应该更快。
从您的代码看起来,您只是用空文本替换,所以为什么不采取整个字符串(由多行组成)并一次替换,而不是一次检查一行。
答案 2 :(得分:0)
您可以使用RegEx。这可能会减轻一些重复的代码
string line = "[myvalue1] some string [someotherstring] [myvalue2]";
// All your Keys stored at a single place
string[] keylist = new string[] { @"\[myvalue1]", @"\[myvalue2]" };
var newString = Regex.Replace(line, string.Join("|", keylist), string.Empty);
希望它有所帮助。