Awesome
<img src="/package_icon.png" height="30px"> Caseless.Fody
Change string comparisons to be case insensitive.
See Milestones for release notes.
This is an add-in for Fody
It is expected that all developers using Fody become a Patron on OpenCollective. See Licensing/Patron FAQ for more information.
Usage
See also Fody usage.
NuGet installation
Install the Caseless.Fody NuGet package and update the Fody NuGet package:
PM> Install-Package Fody
PM> Install-Package Caseless.Fody
The Install-Package Fody
is required since NuGet always defaults to the oldest, and most buggy, version of any dependency.
Add to FodyWeavers.xml
Add <Caseless/>
to FodyWeavers.xml
<Weavers>
<Caseless/>
</Weavers>
Your Code
public bool Foo()
{
var x = "a";
var y = "A";
return x == y;
}
What gets compiled
public bool Foo()
{
var x = "a";
var y = "A";
return string.Equals(x, y, StringComparison.OrdinalIgnoreCase);
}
Converted Methods
The following string methods get converted to their StringComparison equivalents.
Equality
http://msdn.microsoft.com/en-us/library/system.string.op_equalityInequality
http://msdn.microsoft.com/en-us/library/system.string.op_inequalityEquals(String)
http://msdn.microsoft.com/en-us/library/858x0yyxEquals(String, String)
http://msdn.microsoft.com/en-us/library/1hkt4325Compare(String,String)
http://msdn.microsoft.com/en-us/library/84787k22CompareTo(String)
http://msdn.microsoft.com/en-us/library/35f0x18wEndsWith(String)
http://msdn.microsoft.com/en-us/library/2333wewzContains(String)
http://msdn.microsoft.com/en-us/library/dy85x1saIndexOf(String)
http://msdn.microsoft.com/en-us/library/k8b1470sIndexOf(String, Int)
http://msdn.microsoft.com/en-us/library/7cct0x33IndexOf(String, Int, Int)
http://msdn.microsoft.com/en-us/library/d93tkzahLastIndexOf(String)
http://msdn.microsoft.com/en-us/library/1wdsy8fyLastIndexOf(String, Int)
http://msdn.microsoft.com/en-us/library/bc3z4t9dLastIndexOf(String, Int, Int)
http://msdn.microsoft.com/en-us/library/d0z3tk9tStartsWith(String)
http://msdn.microsoft.com/en-us/library/baketfxw
What about String.Replace
This is because there is no overload for a case insensitive replace in the .net framework.
Here is an extension method to achieve it manually. Taken from this StackOverflow answer
public static class StringExtensions
{
public static StringComparison DefaultComparison = StringComparison.OrdinalIgnoreCase;
public static string ReplaceCaseless(this string str, string oldValue, string newValue)
{
var sb = new StringBuilder();
var previousIndex = 0;
var index = str.IndexOf(oldValue, DefaultComparison);
while (index != -1)
{
sb.Append(str.Substring(previousIndex, index - previousIndex));
sb.Append(newValue);
index += oldValue.Length;
previousIndex = index;
index = str.IndexOf(oldValue, index, DefaultComparison);
}
sb.Append(str.Substring(previousIndex));
return sb.ToString();
}
}
Default String Comparison
The default string comparison can be configured in the FodyWeavers.xml file.
For example to use StringComparison.InvariantCultureIgnoreCase
add the following to FodyWeavers.xml.
<Weavers>
<Caseless StringComparison="InvariantCultureIgnoreCase"/>
</Weavers>
Icon
<a href="https://thenounproject.com/noun/aardvark/#icon-No6982">Aardvark</a> designed by <a href="https://thenounproject.com/nmac">N J MacNeil</a> from The Noun Project.