我正在ReSharper中开发一些自定义模式以使事情变得更容易,而且我遇到了一些障碍。
我的一个模式是,我想在用于测试相等性时替换string.Compare的任何实例,并将其替换为string.Equals。乍一看这很容易。
我创建了一个模式:
string.Compare($STRING1$, $STRING2$, $STRINGCOMPAREOPTIONS$) == 0
这里,$ STRINGCOMPAREOPTIONS $是StringComparison类型的表达式。这句话非常适合这种情况:
if(string.Compare("Foo", "Bar", StringComparison.Ordinal) == 0)
当然,我的替换模式也很简单:
string.Equals($STRING1$, $STRING2$, $STRINGCOMPAREOPTIONS$)
现在,我需要使用非文化版本的情况。这个看起来像这样:
if (string.Compare("Foo", "Bar", true) == 0)
现在,在这里,ReSharper已经有一个内置的检查器将它转换为使用StringComparison运算符,但问题是我必须进行第二次转换才能使用Equals ..我宁愿写一个一步完成转换。
我显然可以像这样编写单独的真假版本:
string.Compare($STRING1$, $STRING2$, true) == 0
和
string.Equals($STRING1$, $STRING2$, StringComparison.OrdinalIgnoreCase)
但是,这并没有考虑到有人写这样的事情的情况:
string.Compare($STRING1$, $STRING2$, someVariable) == 0
所以,我需要的是一个类型为bool的表达式,但不是文字的真或假,因此我可以创建一个添加条件的版本。
关于我如何能够创建一个类型但不属于文字类型的模式的任何想法?