2012-08-02 2 views
9

Wenn ich diese Zeile Code in meiner CS-Datei beantrage,Mitglied 'object.Equals (Objekt, Objekt)' kann nicht mit einer Instanzreferenz zugegriffen werden; qualifizieren sie mit einem Typnamen anstelle

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", StringComparer.CurrentCultureIgnoreCase) ? 80 : 0; 

und ich habe diesen Fehler:. Auf 'object.Equals (Objekt, Objekt)' kann nicht mit einer Instanzreferenz zugegriffen werden; qualifiziere es stattdessen mit einem Typnamen.

Ich bin unsicher über das Problem und ich hoffe, Sie können mir helfen. Danke vielmals.

Antwort

3
int totalValue = 0; 
int total = 0; 
totalValue = int.Parse("2".ToString()) * int.Parse("2".ToString()); 
string s = "Yes"; 
totalValue += s.Equals("Yes",StringComparison.CurrentCultureIgnoreCase) ? 80 : 0; 
2

Die Equals-Methode ist eine statische Methode und man kann es nicht über Instanz zugreifen

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

(ich nicht, dass es zu testen kompilieren konnte, aber ich denke, es sollte funktionieren)

9

Sie verwenden falschen Parametertyp. Sie können Equals als Instanzebene-Verfahren oder eine Typ-Ebene (statisch) Methode:

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

str1.Equals(str2, StringComparison comp); 

also in beide, Sie StringComparison brauchen, nicht StringComparer. Und Ihr eins:

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

+1 nur Antwort, die das Problem hervorhebt, ist wegen der Verwendung von StringComparer anstelle des richtigen StringComparison. –

0

Ihr Code ist nicht stark.

Session ist ein Objekt, es kann null sein. Wenn Sie also seinen Wert verwenden möchten, überprüfen Sie zuerst die Sitzung und auch der Wert der Sitzung ist kein ganzzahliger Wert.

Ich schlage vor, Sie so zu tun:

int? i = Session["s"] == null ? null : Parser.ParseInt(Session["s"].ToString()); 
1

der richtigen Arbeitscode:

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; 

Ausgabe:

Sie verwenden statische Eigenschaft von StringComparer Klasse. Verwenden Sie lieber enum StringComparison.

Als String.Equals(str1,str2,StringComparison.CurrentCultureIgnoreCase); oder str1.Equals(str2,StringComparison.CurrentCultureIgnoreCase);

nimmt sowohl enum StringComparison als Methode Argument gibt.

Nun wirft dies einige Fragen auf, warum Sie diesen Fehler in Ihrer IDE nicht identifizieren konnten.

Dies liegt daran, da StringComparer eine abstrakte Klasse und CurrentCultureIgnoreCase eine statische Getter Eigenschaft ist, die StringComparer Klasse ein Objekt vom Typ zurückgibt.

dh

public static StringComparer CurrentCultureIgnoreCase { get; } 

So der Compiler Ihre "Equals" Methode als "Equals" Methode der Object Class

dh

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

Für einige andere behandelt, die neugierig sind über die Verwendung von StringComparer Klasse.

So, hier ist ein Beispiel:

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

für weitere Details Codierung https://www.dotnetperls.com/stringcomparer

Glücklich folgen.

Verwandte Themen