2012-08-02 2 views
9

Cuando estoy solicitando esta línea de código en mi archivo .cs,Member 'object.Equals (object, object)' no se puede acceder con una referencia de instancia; calificarla con un nombre de tipo de cambio

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; 

y me dio este mensaje:. Member 'object.Equals (object, object)' no se puede acceder con una referencia de instancia; calificarlo con un nombre de tipo en su lugar.

No estoy seguro del problema y espero que ustedes puedan ayudarme. Muchas gracias.

Respuesta

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

los Iguales método es un método estático y no se puede acceder a él a través de instancia

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; 

(no pude compilar que para probarlo, pero creo que debería funcionar)

9

Está utilizando un tipo de parámetro incorrecto. Se puede utilizar como un método Equals nivel de instancia o un método de nivel de tipo (estático):

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

str1.Equals(str2, StringComparison comp); 

Así, en tanto, es necesario StringComparison, no StringComparer. Y su uno:

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

+1 única respuesta que resalta que el problema se debe al uso de StringComparer en lugar del StringComparison adecuado. –

0

Su código no es fuerte.

Session es un objeto, puede ser nulo, por lo que si desea utilizar su valor, compruebe primero la sesión, e incluso el valor de la sesión no es un valor entero.

sugiero que hagas de esta manera:

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

El código correcto funcionamiento:

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; 

Edición:

que está utilizando la propiedad estática de la clase StringComparer. En lugar de usar enum StringComparison.

Como String.Equals(str1,str2,StringComparison.CurrentCultureIgnoreCase); o str1.Equals(str2,StringComparison.CurrentCultureIgnoreCase);

tanto se lleva StringComparison enumeración ya que hay argumento de un método.

Ahora, esto genera algunas preguntas, por qué no fue capaz de identificar este error en su ide.

Esto se debe a que, ya StringComparer es una clase abstracta y CurrentCultureIgnoreCase es una propiedad getter estática, que devuelve un objeto de tipo StringComparer clase.

es decir,

public static StringComparer CurrentCultureIgnoreCase { get; } 

Así, el compilador le ha tratado su método "Equals" como método de "Equals" de Object Class

es decir,

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

Por alguna otra que son curiosos sobre el uso de StringComparer clase.

Así que aquí es un ejemplo:

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

para más detalles siguen https://www.dotnetperls.com/stringcomparer

feliz de codificación.

Cuestiones relacionadas