1

Match在 C# 中有很多方法可以访问 a的值:

Match mtch = //whatever
//you could do
mtch.Value
//or 
mtch.ToString()
//or
mtch.Groups[0].Value
//or 
mtch.Groups[0].ToString()

我的问题是:访问它的最佳方式是什么?

(我知道这是微优化,我只是想知道)

4

3 回答 3

2

我写了一个快速测试并最终得到以下结果......

    [TestMethod]
    public void GenericTest()
    {
        Regex r = new Regex(".def.");
        Match mtch = r.Match("abcdefghijklmnopqrstuvwxyz", 0);
        for (int i = 0; i < 1000000; i++)
        {
            string a = mtch.Value;                  // 15.4%
            string b = mtch.ToString();             // 19.2%
            string c = mtch.Groups[0].Value;        // 23.1%
            string d = mtch.Groups[0].ToString();   // 38.5%
        }
    }
于 2013-05-03T17:26:05.863 回答
0

如果您根据您提供的样本谈论效率,我猜想最有效的将是第一个,因为当您使用ToSting()它时,它会为您的变量添加额外的转换功能,这将花费额外的时间,

于 2013-05-03T17:20:08.840 回答
0
  1. 写一个测试
  2. 读取结果
  3. 想想结果

如果您不想编写测试,请查看 Microsoft 中间语言 (MSIL) 并考虑需要更多时间


我也用结果测试了它

            // VS 2012 Ultimate
            // 
            Regex r = new Regex(".def.");
            Match mtch = r.Match("abcdefghijklmnopqrstuvwxyz", 0);
            string a, b, c, d;
            for (int i = 0; i < int.MaxValue; i++)
            {
               a = mtch.Value;                  // 1.4%
               b = mtch.ToString();             // 33.2%
               c = mtch.Groups[0].Value;        // 15.3%
               d = mtch.Groups[0].ToString();   // 44.1%
            }
于 2013-05-03T17:18:19.257 回答