首页 文章

可变的重用和效率

提问于
浏览
0

我正在解析一个文本文件,我正在做的很多事情涉及到如下代码:

int jobTypeStart = contents.IndexOf("JobType: ");
int jobTypeEnd = contents.IndexOf("\r\n", jobtypeStart);
string jobType = contents.Substring(jobtypeStart, 
    (jobTypeEnd - jobTypeStart )).Replace("JobType: ","");

这个相同的基本模式每个文件重复30次,数百或数千个文件在foreach循环中 . 每次声明一个新变量或重用那些int变量并只改变我正在寻找的IndexOf是否更有效?所以为了清楚起见,我的下一段代码应该是:

int userNameStart = contents.IndexOf("UserName: ");
int userNameEnd = contents.IndexOf("\r\n", userNameStart);
string userName= contents.Substring(userNameStart, 
    (userNameEnd - userNameStart)).Replace("UserName: ","");

或者整个事情应该更像:

int stringStart = contents.IndexOf("JobType: ");
int stringEnd = contents.IndexOf("\r\n", stringStart);
string jobType = contents.Substring(stringStart , 
    (stringEnd  - stringStart)).Replace("JobType: ","");

stringStart = contents.IndexOf("UserName: ");
stringEnd = contents.IndexOf("\r\n", stringStart);
string userName= contents.Substring(stringStart , 
    (stringEnd  - stringStart)).Replace("UserName: ","");

或者我过度复杂的事情真的无关紧要?

干杯 .

4 回答

  • 0

    看看你的代码,我可以看到一个模式 . 为什么不将所有变量(JobType,UserName ...)放入列表中并对其进行迭代以获取字符串 .

  • 3

    你应该将它重构为一个方法:

    private string Extract(string text, string field)
    {
        int stringStart = text.IndexOf(field);
        int stringEnd = text.IndexOf("\r\n", stringStart);
        return text.Substring(stringStart , (stringEnd  - stringStart)).Replace(field,"");
    }
    

    并称之为

    string userName = Extract(contents, "UserName :");
    

    在这种情况下,我赞成可读性 .

  • 0

    也许一种做这些东西的方法会有所帮助吗?

    private string DoStuff(string contents, string matchString)
     {
         int stringStart = contents.IndexOf(matchString + ": ");
         int stringEnd = contents.IndexOf("\r\n", stringStart);
         return contents.Substring(stringStart, (stringEnd - stringStart)).Replace(matchString + ": ", "");
     }
    

    然后每次都打电话给它:

    string jobType = DoStuff(contents, "JobType");
    string userName = DoStuff(contents, "UserName");
    
  • 1

    你最初的方式很好 . int和string是声明中的值类型,据我所知,每次进行另一次循环迭代时,它都会从堆中拉出来 .

相关问题