Member 'object.Equals(object, object)' cannot be accessed with an instance reference; qualify it with a type name instead

You are using wrong parameter type. You can use Equals as an instance level method or a type level (static) method:

string.Equals(str1, str2, StringComparison comp);

str1.Equals(str2, StringComparison comp);

So, in both, you need StringComparison, not StringComparer. And your one:

totalValue += Session["IsChauffeurUsed"].ToString().Equals("Yes", StringComparison.CurrentCultureIgnoreCase) ? 80 : 0;

The Equals method is a Static method and you cannot access it via instance

string isChauffeurUsed = Session["IsChauffeurUsed"].ToString();
totalValue += string.Equals(isChauffeurUsed, "Yes", 
                     StringComparison.CurrentCultureIgnoreCase) 
              ? 80 
              : 0;

The correct working code:

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;

Issue:

You are using static property of StringComparer class. Rather use enum StringComparison.

As String.Equals(str1,str2,StringComparison.CurrentCultureIgnoreCase); or str1.Equals(str2,StringComparison.CurrentCultureIgnoreCase);

both takes enum StringComparison as there method argument.

Now this raises some questions, why you were not able to identify this mistake in your ide.

This is because, since StringComparer is an abstract class and CurrentCultureIgnoreCase is a static getter property, which returns an object of type StringComparer class.

i.e,

public static StringComparer CurrentCultureIgnoreCase { get; }

Thus the compiler is treating your "Equals" method as the "Equals" method of Object Class

i.e,

public static bool Equals(object objA, object objB);

For some other who are curious about the use of StringComparer class.

So here is an example:

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"));
    }

for more details follow https://www.dotnetperls.com/stringcomparer

Happy coding.

Tags:

C#

Asp.Net