Diferença entre "String" e "string" no .NET e qual é o melhor?


15

No .NET Framework, pelo menos na linguagem C #, temos duas "versões" do tipo de seqüência de caracteres:

  • "corda"
  • "Corda"

Parece que eles são intercambiáveis, mas são mesmo? Se eles não são intercambiáveis, geralmente é melhor usar um em vez do outro e em que circunstâncias?


1
Semelhante a esta pergunta: stackoverflow.com/q/6000517/6504
Agent_9191 04/11

2
Estilisticamente, costumo usar a versão em minúscula quando me refiro ao tipo e a versão em maiúscula quando estou chamando um método estático de System.String.
Joel Mueller


2
stringnão existe .net, existe apenas em C #.
código é o seguinte

1
Embora isso possa ser um pouco mais adequado para o Stack Overflow, não acho que seja completamente fora de tópico para os programadores, e como o Stack Overflow já possui pelo menos uma duplicata, não faria muito sentido migrar isso. Portanto, pare de sinalizar / feche a votação para migrar, se você acha que isso deve ser fechado, isso é legal, mas deve ser fechado e não migrado.
yannis

Respostas:


30

Bem, de acordo com o MSDN

string é um alias para String no .NET Framework.

Onde "String" é de fato System.String.

Eu diria que eles são intercambiáveis ​​e não há diferença quando e onde você deve usar um ou outro.

Seria melhor ser consistente com qual deles você usou.


por alguma razão, eu pensava que String era um invólucro de classe em torno de uma string digitada com valor e isso leva à idéia de boxe ... estou totalmente errado aqui?
Aaron Anodide

1
@ Gabriel No, String(e, portanto, stringpor pseudônimo) são tipos de referência.
Kris Harper #

@ Gabriel: Java não faz isso com coisas como byte vs byte?
Whatsisname

O mesmo vale para Double vs double e outros tipos de dados?
Gavin Coates

1
@AaronAnodide Eu acredito que é uma convenção Java, que provavelmente é onde você ouviu falar.
KChaloux

20

Como apontado, eles são a mesma coisa e stringé apenas um alias para String.

Pelo que vale a pena, eu uso stringpara declarar tipos - variáveis, propriedades, valores e parâmetros de retorno. Isto é consistente com o uso de outros tipos de sistemas de - int, bool, varetc (embora Int32e Booleantambém estão correctas).

Eu uso Stringao usar os métodos estáticos na classe String, como String.Split()ou String.IsNullOrEmpty(). Eu sinto que isso faz mais sentido porque os métodos pertencem a uma classe e é consistente com a maneira como eu uso outros métodos estáticos.


Também usamos essa convenção no trabalho e eu gosto. Meu cérebro faz a conexão automaticamente.
SBI

4

Eu sugiro usar letras minúsculas string. Maiúsculas Stringusarão a primeira classe denominada String encontrada nos namespaces importados ... o que geralmente é System.String. É possível que sua própria classe String seja usada.


3
Se você tiver dois tipos importados diferentes com o mesmo nome e usar esse nome sem a qualificação do espaço para nome, receberá um erro.
svick

É possível enganar Stringpara o trabalho, nunca é possível enganar string.
11119 Bryan Boettcher

Ainda assim, não acho que seja uma razão suficiente para usar string.
svick

5
Como é "alguém pode quebrar" vs. "nunca se quebra", com todo o resto sendo idêntico, não é uma razão suficientemente boa?
Bryan Boettcher

4

string é uma palavra-chave C # que é simplesmente um alias para o System.String

..mas como uma palavra-chave, seu editor de cores / IDE de sintaxe mostrará na cor da palavra-chave, o mesmo que int, double, if, else, etc. Estilisticamente, você pode preferir usar a palavra-chave do que o System.Stringtipo (ou logo Stringapós você já fez using System;).

Este é um ponto de nicho, porém, como ainda bool, char, int, doublee stringsão todos aliases palavras-chave para tipos de sistema, stringé uma odd-one-out, pois é um tipo de referência e os outros são tipos de valor.


4
objecté um alias de palavra-chave para um tipo de referência, também
Nikie

Ah, sim, eu esqueci tudo sobre isso - obrigado por lembrar.
JBRWilkinson

2

stringé apenas um apelido para String, eles são basicamente os mesmos.

Você pode usar o que você preferir, embora eu geralmente uso stringquando eu estou pensando em usá-lo muito parecido com um tipo de dados primitivo (semelhante a int, floatou bool) e Stringquando eu estou pensando em usá-lo como um objeto / classe. Por exemplo:

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

No caso acima, estou pensando em usar foosimplesmente para armazenar algum texto (efetivamente como primitivo), então eu uso string; no entanto, quando ligo String.isNullOrWhitespace(string), uso String. Faço isso, porque geralmente a primeira letra dos nomes de classe é maiúscula ( String) enquanto a primeira letra de primitivas (como int) não é.


-2

String é usada com o namespace System.String, string é usada na especificação do compilador C #, além disso System.String é o valor do tipo de referência. Você prefere lidar com objetos do sistema, sequência apenas para fins literais. Sistema e sistema trabalhando ambos são iguais.

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

String é usado para comparar fins iguais e outros também.


4
este não parece oferecer nada substancial sobre anteriores 6 respostas
mosquito
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.