如何以编程方式将整数比较替换为字符串上的布尔比较?

时间:2015-12-22 13:15:51

标签: c# .net

我正在将C ++应用转换为C#,并且在许多地方使用AnsiCompare来比较两个字符串。这会返回一个整数,所以整个代码都有这样的东西:

if (str.AnsiCompare("value") == 0 || str2.AnsiCompare("val") != 0)

我刚刚在AnsiCompare上执行了查找和替换,并将其与Equals切换,但由于您无法隐式地将bool转换为int C#我必须手动完成并删除所有比较为0。

相反,我试图编写一个应用程序,并逐行解析,如下所示:

List<int> lineIndices = new List<int>();
int lineIndex = 0;

foreach(var line in lines)
{
    int index = line.IndexOf("Equals(\"");

    if (index > 0)
        lineIndices.Add(lineIndex)
}

for (int i = lineIndices.Count; i >= 0; i--)
{
    lines[lineIndices[i]].Replace(" == 0", String.Empty);
}

我还没有真正测试过它,但基本的想法是遍历每一行,看看它是否呼叫&#34;等于&#34;并将该行号添加到行号列表中。然后循环回来(不确定我是否真的需要反向进行,但我认为这并不重要)并将所有等同于零的&#39;与空string进行比较。由于Equals返回bool,因此相当简单。但是,与!= 0比较时,我不知道如何找到代码段的开头来为感叹号添加前缀。

我知道有String.IndexOf(string, int32, int32)来搜索从给定位置开始的值以及一定数量的位置来检查,但我需要相反。从一个位置开始并向后检查一个空格,然后用空格+感叹号替换该空格?

我想我可以从一开始就开始使用LastIndexOf来查找"Equals"索引之前的最后一个空格,但这并不能解决那些不合适的情况。有一个空格,例如if (someStr.Equals("val") != 0)。然后我会在(之前获得空格。

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:2)

Visual Studio&#39;查找和替换&#39;使用正则表达式的工具&#39;对于这样的任务是完美的。

例如,要将每个stringVariable.AnsiCompare(stringLiteral) == 0替换为stringVariable == stringLiteral,您可以使用以下正则表达式:

(?<str>[a-zA-Z0-9]*)\.AnsiCompare\((?<compareWith>"[^"]*")\) == 0

并替换为

${str} == ${compareWith}

答案 1 :(得分:1)

我会使用RegEx

str.AnsiCompare("value")替换为string.Compare(str, "value")

答案 2 :(得分:0)

或者,您可以编写扩展方法,只需添加使用而不是所有替换

public static int AnsiComapre(this string x, string y)
{
    return String.Compare(x, y);
}