¿Por qué me sale “no se puede acceder con una instancia de referencia” cuando se utiliza teststring.Participar pero no teststring.Split? (c#)

Estoy aprendiendo c# y hay algo que no entiendo que he sido incapaz de encontrar cualquier ayuda en línea.

string[] = testarray = { "test1", "test2", "test3" };
teststring = teststring.Join(" ", testarray);

Se produce el siguiente mensaje de error:

Miembro de la ‘cadena.Únete a(cadena, parámetros string[])’ no se puede acceder con una instancia de referencia; se califican con un nombre del tipo de cambio.

No obstante, el trabajo si tengo que cambiar a:

teststring = string.Join(" ", testarray);

Si yo sin embargo el uso de la función de División como en:

teststring = teststring.Split(new char[] {' '});

Yo no estoy recibiendo un error. Supongo que esto tiene algo que ver con ciertas funciones de la clase string ser estática y algunos no, pero ¿cómo puedo saber que la función es estática y que no es? (si esta es la razón)

Estos forzada técnicas de llamadas entre estática /non-static seguro de que es algo que hay que acostumbrarse.

OriginalEl autor Kristian Erik Tigersjäl | 2010-12-06

6 respuestas

  1. 4

    Estás en lo correcto en la razón; String.Join es estático sino String.Split no.

    Yo no estoy recibiendo un error. Supongo que esto tiene algo que ver con ciertas funciones de la clase string ser estática y algunos no, pero ¿cómo puedo saber que la función es estática y que no es? (si esta es la razón)

    Usted puede mirar el MSDN docs.

    Por ejemplo, en la página de String.Join, hay un S junto al cuadro morado para cada método; esto indica que el método se declara como static. Además, si hace clic en una determinada sobrecarga verás el método declarado como static. Por ejemplo,

    public static string Join(
    string separator,
    IEnumerable<string> values
    )

    Sin embargo, para String.Split, no hay S junto al cuadro morado para cada método. Para ninguno de los particulares sobrecargas es el método declarado como static. Por ejemplo

    public string[] Split(
    params char[] separator
    )

    OriginalEl autor jason

  2. 6

    Usted puede mirar en la documentación de MSDN para la String clase para obtener una lista de todos los métodos disponibles. Métodos estáticos tienen una naranja “S” icono junto a ellos, mientras que los métodos de instancia no, por ejemplo:

    ¿Por qué me sale

    La hora de pensar en la diferencia entre los métodos estáticos y de instancia, piensa si la funcionalidad de este método depende de una instancia particular de la clase.

    Si la respuesta es sí, entonces es muy probable que para ser implementado como un método de instancia; y si no, es probable que sea un método estático.

    Por ejemplo, el Split método que separa a una instancia específica de la String clase (la cadena que se llama) en una matriz.

    En contraste, la Join método es como un método de utilidad, los cuales pueden ser llamados para combinar una matriz separados por una cadena -, sin crear una instancia de la String clase con el fin de llamar.

    Usted necesita una instancia de string para servir como el de unirse a la cadena. Por lo que uno podría imaginar String.Join no es estática, pero en lugar de ser un método de instancia y se invoca como ",".Join(strings).
    Eso es cierto, aunque si unirse se implementa como un método de instancia parece que tendría más sentido que sea definido en la matriz de valores que se unió, en lugar de la separación.

    OriginalEl autor Donut

  3. 4

    Esto es debido a que se Unan es un método estático en la cadena. los métodos estáticos son llamados siempre utilizando el nombre de la clase, no el nombre de una variable para una instancia de esa clase.

    Yo estaba en el camino correcto entonces, ¿cómo puedo saber si una función es estático o no de decir la cadena?
    No ha contestado a la pregunta completa.

    OriginalEl autor Jim L

  4. 2

    Join es un método estático en la clase String, mientras que la División es un método de instancia. Para saber cual es cual, haga clic en Cadena e Ir A Definintion. Esto le mostrará la definición de la clase (con el método de declaraciones, etc.)

    OriginalEl autor Mark Avenius

  5. 2

    Supongo que es porque el método no está directamente relacionada con la String de referencia en cualquier medio y en el fin de evitar cualquier confusión que hizo de ella un método estático de String lugar, mientras que los de Split está directamente relacionado con como va a dividir ese particular String instancia.

    Buena respuesta. +1

    OriginalEl autor w69rdy

  6. 1

    Esta es la Respuesta perfecta.. Funciona bien..

    Una función miembro estática no pertenecen a una instancia específica de una clase, sino más bien para el tipo de clase en sí. Como resultado, cuando usted está tratando de acceder a ella para una instancia específica, el compilador no permite esto.

    Para llamar a la función correctamente, usted tendría que escribir

    classname.nombremetodo(parámetro)

    lugar de
    Classname cl=new Nombreclase();
    cl.nombremetodo(parámetro);

    o eliminar la estática modificado.

    Para más información por Favor Consulte este..
    http://www.codeguru.com/forum/showthread.php?t=438550

    OriginalEl autor Cholavendhan

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *