有很多方法可以在C#中访问Match
的值:
Match mtch = //whatever
//you could do
mtch.Value
//or
mtch.ToString()
//or
mtch.Groups[0].Value
//or
mtch.Groups[0].ToString()
我的问题是:访问它的最佳方式是什么?
(我知道这是微优化,我只是想知道)
答案 0 :(得分: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%
}
}
答案 1 :(得分:0)
如果您不想编写测试,请查看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%
}
答案 2 :(得分:0)
如果你在谈论基于你提供的样本的效率,我猜你最有效的是第一个,因为当你使用ToSting()
时,它会为你的变量添加一个额外的转换功能,这需要额外的时间,