在进行字符串替换之前是否没有必要使用这个if语句?
if (myString.Contains(oldValue))
{
myString = myString.Replace(oldValue, newValue);
}
答案 0 :(得分:11)
所有详细信息都在String.Replace的文档中:
返回值:
一个等于当前字符串的字符串,但 oldValue 的所有实例都替换为 newValue 。 如果在当前实例中找不到 oldValue ,则该方法会返回当前实例。
不需要if
语句。
if
语句甚至不是性能优化,因为String.Replace
返回相同的对象实例,如果找不到 oldValue 。我已使用以下代码验证了这一点:
namespace StringReplaceTest
{
class Program
{
static void Main(string[] args)
{
string s = "Test";
string s2 = s.Replace("Foo", "Bar");
string s3 = s.Replace("es", "tt");
}
}
}
使用方便的制作对象ID 功能(右键单击本地中的符号,自动或观看< / em> window;有关详细信息,请参阅Common Expression Evaluator Features),产生以下输出:
s | "Test" {$1}
s2 | "Test" {$1}
s3 | "Tttt" {$2}
答案 1 :(得分:3)
由于String.Replace()
函数在字符串不包含指定值时不会抛出异常,因此无需验证它。它将经历一个不必要的条件。
答案 2 :(得分:0)
我知道这是一个旧线程,但是只想提供我的2¢!
请让我知道我在说什么是错的,但是我只是在我的环境中尝试过,似乎很合理! :)
在大多数情况下,是的,replace函数将为您完成包含,因此无需单独包含它。但是,如果您的“新值”是从某个方法派生的,这样做是有好处的-取决于要完成多少工作才能在该方法中获得该值!
不 有利的示例: 我正在为应用程序发送的电子邮件的正文制作“字符串替换符”。例如,如果用户在电子邮件正文中包含“ [[User Name]]”,我想用收件人的名字替换它。幸运的是,我们的框架将该信息存储在内存中,所以我不介意对此进行一次替换。
有利的示例: 在与上述相同的前提下,另一个替换项是“ [[Payments]]”。这将转到数据库,并显示用户进行的前1000笔交易的日志,然后对检索到的数据进行一些处理,并在电子邮件正文上显示详细信息。想象一下,每次用户从应用程序发送电子邮件时都必须执行所有这些操作,即使其中不包含“ [[Payments]]”关键字也是如此!在调用我的方法(其字符串值为“ [[Payments]]”)之前拥有包含项确实很有意义!
长话短说,这取决于您的实现,但是在大多数情况下-是的,这是不必要的。
答案 3 :(得分:-1)
以我的经验,如果您要替换很多时间(并且需要一次替换),则可以使用Contains()更好地进行检查。就我而言,是帮助我的代码更快(几乎翻了一番)。