正确的工作代码:
int totalValue = 0;
int total = 0;
totalValue = int.Parse(Session["price"].ToString()) * int.Parse(Session["day"].ToString());
// This line
totalValue += Session["IsChauffeurUsed"].ToString().Equals("Yes", StringComparison.CurrentCultureIgnoreCase) ? 80 : 0;
问题:
您正在使用 StringComparer 类的静态属性。
而是使用枚举 StringComparison。
作为String.Equals(str1,str2,StringComparison.CurrentCultureIgnoreCase);
或str1.Equals(str2,StringComparison.CurrentCultureIgnoreCase);
两者都将枚举 StringComparison 作为方法参数。
现在这引发了一些问题,为什么您无法在您的 ide 中识别出这个错误。
这是因为,由于 StringComparer 是一个抽象类,而 CurrentCultureIgnoreCase 是一个静态 getter 属性,它返回类型为 StringComparer 类的 object。
即
public static StringComparer CurrentCultureIgnoreCase { get; }
因此,编译器将您的“Equals”方法视为Object Class 的“Equals”方法
即
public static bool Equals(object objA, object objB);
对于其他对 StringComparer 类的使用感到好奇的人。
所以这里是一个例子:
static void Main()
{
// Use these two StringComparer instances for demonstration.
StringComparer comparer1 = StringComparer.Ordinal;
StringComparer comparer2 = StringComparer.OrdinalIgnoreCase;
// First test the results of the Ordinal comparer.
Console.WriteLine(comparer1.Equals("value-1", "value-1")); // True
Console.WriteLine(comparer1.Equals("value-1", "VALUE-1")); // False
Console.WriteLine(comparer1.Compare("a", "b"));
Console.WriteLine(comparer1.Compare("a", "a"));
Console.WriteLine(comparer1.Compare("b", "a"));
// Test the results of the OrdinalIgnoreCase comparer.
Console.WriteLine(comparer2.Equals("value-1", "value-1")); // True
Console.WriteLine(comparer2.Equals("value-a", "value-b")); // False
Console.WriteLine(comparer2.Equals("value-1", "VALUE-1")); // True
Console.WriteLine(comparer2.Compare("a", "B"));
Console.WriteLine(comparer2.Compare("a", "A"));
Console.WriteLine(comparer2.Compare("b", "A"));
}
更多详情请关注https://www.dotnetperls.com/stringcomparer
编码愉快。