¿Diferencia entre "String" y "string" en .NET y cuál es la mejor?

15

En .NET Framework, al menos en el lenguaje C #, tenemos dos "versiones" del tipo de cadena:

  • "cuerda"
  • "Cuerda"

Parece que son intercambiables, pero ¿lo son realmente? Si no son intercambiables, ¿es generalmente mejor usar uno en lugar del otro y bajo qué circunstancias?

Ciberherbalista
fuente
1
Similar a esta pregunta: stackoverflow.com/q/6000517/6504
Agent_9191
2
Estilísticamente, tiendo a usar la versión en minúsculas cuando me refiero al tipo, y la versión en mayúsculas cuando llamo a un método estático de System.String.
Joel Mueller
44
Idéntico a stackoverflow.com/questions/7074/… .
zzzzBov
2
stringno existe en .net, solo existe en C #.
CodesInChaos
1
Aunque esto podría ser un poco más adecuado para Stack Overflow, no creo que esté completamente fuera de tema para los Programadores, y dado que Stack Overflow ya tiene al menos un duplicado, no tendría mucho sentido migrar esto. Por lo tanto, deje de marcar / cerrar la votación para migrar, si cree que esto debería cerrarse, es genial, pero debe cerrarse y no migrarse.
Yannis

Respuestas:

30

Bueno según el MSDN

string es un alias para String en .NET Framework.

Donde "String" es de hecho System.String.

Yo diría que son intercambiables y no hay diferencia cuando y donde debe usar uno u otro.

Sin embargo, sería mejor ser consistente con el que usaste.

ChrisF
fuente
Por alguna razón, tenía en mi cabeza que String era un contenedor de clase alrededor de una cadena con valor y esto lleva a la idea del boxeo ... ¿Estoy totalmente equivocado aquí?
Aaron Anodide
1
@Gabriel No, String(y stringpor lo tanto por alias) son tipos de referencia.
Kris Harper
@Gabriel: ¿Java no hace eso con cosas como byte vs Byte?
whatsisname
¿Es lo mismo también cierto para Double vs double y otros tipos de datos?
Gavin Coates
1
@AaronAnodide Creo que es una convención de Java, que es probablemente donde se enteró.
KChaloux
20

Como se señaló, son lo mismo y stringes solo un alias String.

Para lo que vale, lo uso stringpara declarar tipos: variables, propiedades, valores de retorno y parámetros. Esto es consistente con el uso de otros tipos de sistemas - int, bool, varetc (aunque Int32y Booleantambién son correctos).

Lo uso Stringcuando uso los métodos estáticos en la clase String, como String.Split()o String.IsNullOrEmpty(). Siento que esto tiene más sentido porque los métodos pertenecen a una clase, y es coherente con la forma en que uso otros métodos estáticos.

Kirk Broadhurst
fuente
Usamos esta convención en el trabajo también, y me gusta. Mi cerebro hace la conexión automáticamente.
OSE
4

Sugeriría usar minúsculas string. Mayúsculas Stringusará la primera clase llamada String que encuentra en los espacios de nombres importados ... que generalmente es System.String. Es posible que se use su propia clase String.

Bryan Boettcher
fuente
3
Si tiene dos tipos importados diferentes con el mismo nombre, y usa ese nombre sin calificación de espacio de nombres, obtendrá un error.
svick
Es posible engañar Stringa trabajar, nunca es posible engañar string.
Bryan Boettcher
Aún así, no creo que sea una buena razón para usar string.
svick
55
¿Cómo es "uno podría romperse" frente a "uno nunca se romperá", siendo todo lo demás idéntico y no una razón suficiente?
Bryan Boettcher
4

string es una palabra clave de C # que es simplemente un alias para el System.String

.. pero como es una palabra clave, su editor de colores de sintaxis / IDE lo mostrará en color de palabras clave, igual que int, double, if, else, etc. Estilísticamente, puede preferir usar la palabra clave en lugar del System.Stringtipo (o justo Stringdespués lo has hecho using System;).

Este es un punto de nicho, sin embargo, ya que si bien bool, char, int, doubley stringson todos los alias de palabras clave para los tipos de sistemas, stringes un pico, con un out, ya que es un tipo de referencia y los otros son los tipos de valor.

JBRWilkinson
fuente
44
objectes un alias de palabra clave para un tipo de referencia, también
nikie
Ah, sí, me olvidé de eso, gracias por recordarme.
JBRWilkinson
2

stringes solo un alias para String, en última instancia, son lo mismo.

Puede utilizar cualquiera prefiere, aunque generalmente uso stringcuando estoy planeando sobre el uso que sea mucho más como un tipo de datos primitivo (similar a int, floato bool) y Stringcuando estoy en la planificación de usarlo como un objeto / clase. Por ejemplo:

string foo = "   ";
if (String.isNullOrWhitespace(foo)) 
{
    // ...
}

En el caso anterior, planeo usar foosimplemente para almacenar algo de texto (efectivamente como primitivo), así que lo uso string; sin embargo, cuando llamo String.isNullOrWhitespace(string)uso String. Hago esto, porque generalmente la primera letra de los nombres de clase se escribe con mayúscula ( String) mientras que la primera letra de primitivas (como int) no.

BBB
fuente
-2

La cadena se usa con el espacio de nombres System.String, la cadena se usa la especificación del compilador C #, además, System.String es un valor de tipo de referencia. Se prefiere tratar con objetos del sistema, cadenas solo para fines literales. El sistema y el sistema ambos funcionan igual.

string TC = new System.String('/', 5);

La cadena también se usa para fines de comparación, igual y otros.

Anjan Kant
fuente
44
esto no parece ofrecer nada sustancial sobre las 6 respuestas anteriores
mosquito