$
é uma abreviação de String.Format
e é usado com interpolações de strings, que é um novo recurso do C # 6. Como usado no seu caso, ele não faz nada, assim como string.Format()
não faria nada.
Isso ocorre quando usado para criar strings com referência a outros valores. O que anteriormente tinha que ser escrito como:
var anInt = 1;
var aBool = true;
var aString = "3";
var formated = string.Format("{0},{1},{2}", anInt, aBool, aString);
Agora se torna:
var anInt = 1;
var aBool = true;
var aString = "3";
var formated = $"{anInt},{aBool},{aString}";
Há também uma forma alternativa - menos conhecida - de interpolação de string usando $@
(a ordem dos dois símbolos é importante). Ele permite que os recursos de uma @""
sequência sejam misturados $""
para suportar interpolações de sequência sem a necessidade de \\
toda a sequência. Portanto, as duas linhas a seguir:
var someDir = "a";
Console.WriteLine($@"c:\{someDir}\b\c");
irá produzir:
c:\a\b\c
$@
, então você é forçado a escapar do"
personagem usando""
. Este não é o caso quando você usa apenas$
.Ele cria uma cadeia de caracteres interpolada .
Do MSDN
ex:
Você pode usar expressões dentro da sequência interpolada
O bom disso é que você não precisa se preocupar com a ordem dos parâmetros, como faz
String.Format
.Agora, se você deseja remover alguns parâmetros, é necessário atualizar todas as contagens, o que não é mais o caso.
Observe que o bom e velho
string.format
ainda é relevante se você deseja especificar informações culturais em sua formatação .fonte
$
e especificar informações de cultura se converter seus dados em string dentro da$
expressão usando a cultura correta, por exemplo{somevar.ToString(...,[Insert culture info here])}
,.Código de exemplo
Resultado
É seqüências de caracteres interpoladas . Você pode usar uma cadeia de caracteres interpolada em qualquer lugar em que possa usar uma cadeia de caracteres literal. Ao executar o programa, o código seria executado com a literal de cadeia interpolada, o código calcula uma nova literal de cadeia avaliando as expressões de interpolação. Esse cálculo ocorre sempre que o código com a sequência interpolada é executado.
O exemplo a seguir produz um valor de sequência em que todos os valores de interpolação de sequência foram calculados. É o resultado final e tem o tipo string. Todas as ocorrências de chaves duplas
(“{{“ and “}}”)
são convertidas em uma única chave.Depois de executar acima de 2 linhas, a variável
message
contém "Olá, Mundo".Referência - MSDN
fonte
Recurso legal. Eu só quero salientar a importância do melhor que o string.format, se não for aparente para algumas pessoas.
Eu li alguém dizendo ordem string.format como "{0} {1} {2}" para corresponder aos parâmetros. Você não é obrigado a solicitar "{0} {1} {2}" em string.format, também pode fazer "{2} {0} {1}". No entanto, se você tiver muitos parâmetros, como 20, realmente deseja sequenciar a sequência para "{0} {1} {2} ... {19}". Se for uma bagunça embaralhada, será difícil alinhar seus parâmetros.
Com $, você pode adicionar parâmetros em linha sem contar seus parâmetros. Isso torna o código muito mais fácil de ler e manter.
A desvantagem de $ é que você não pode repetir o parâmetro na string facilmente, é necessário digitá-lo. Por exemplo, se você está cansado de digitar System.Environment.NewLine, pode executar string.format ("... {0} ... {0} ... {0}", System.Environment.NewLine), mas, em $, você deve repetir. Você não pode fazer $ "{0}" e passá-lo para string.format porque $ "{0}" retorna "0".
Na nota lateral, eu li um comentário em outra tática duplicada. Eu não poderia comentar, então aqui está. Ele disse que
cria mais de um objeto de sequência. Isso não é verdade, na verdade. Se você fizer isso em uma única linha, ele criará apenas uma sequência e será colocada no cache da sequência.
Todos eles retornam uma sequência e apenas criam um valor no cache.
Por outro lado:
Cria 4 valores diferentes no cache, porque existem 4 ";".
Assim, será mais fácil escrever código como o seguinte, mas você criaria cinco seqüências interpoladas, conforme Carlos Muñoz corrigiu:
Isso cria uma única sequência no cache, enquanto você tem um código de leitura muito fácil. Não tenho certeza sobre o desempenho, mas estou certo de que a Microsoft irá otimizá-lo se ainda não o estiver fazendo.
fonte
String.Format()
e concatenadas em tempo de execução comString.Concat
. Por isso, é melhor que você não dividi-lo em várias linhasObserve que você também pode combinar os dois, o que é bem legal (embora pareça um pouco estranho):
fonte
$@
ou@$
. Infelizmente só pode ser$@
@
define como representar a cadeia literal.$
é um atalho parastring.Format
. Pense nisso como$(@"");
string.Format
. É interessante apresentar um valor que é analisado como astring.Format
, portanto faz sentido parcialmente, mas não inteiramente.$
é basicamente uma chamada de função implícita, enquanto@
faz parte do literal, assim comom
no literal decimal. É por isso que existe apenas uma ordem lógica.$
, mas por uma questão de compatibilidade máxima e não por codificação permanente, se o separador de diretório é '/' ou '\', além de evitar a inevitável confusão que causa uma barra dupla ou uma barra ausente onde deveria foram um, eu recomendo usar emPath.Combine()
vez de usar concatenações de string ao trabalhar com diretórios e arquivos.É mais conveniente do que string.Format e você pode usar o intellisense aqui também.
E aqui está o meu método de teste:
fonte
Significa interpolação de string.
Ele o protegerá porque está adicionando proteção ao tempo de compilação na avaliação da string.
Você não receberá mais uma exceção com
string.Format("{0}{1}",secondParamIsMissing)
fonte
O exemplo a seguir destaca várias vantagens do uso de seqüências de caracteres interpoladas em relação
string.Format()
à limpeza e legibilidade. Também mostra que o código dentro{}
é avaliado como qualquer outro argumento de função, como faria sestring.Format()
estivéssemos sendo chamados.fonte
A sintaxe $ é legal, mas com uma desvantagem.
Se você precisar de algo como um modelo de seqüência de caracteres, que seja declarado no nível da classe como campo ... bem em um local como deveria ser.
Então você tem que declarar as variáveis no mesmo nível ... o que não é muito legal.
É muito melhor usar a string.Format sintaxe para esse tipo de coisa
O uso de globais não é realmente bom e, além disso - também não funciona com globais
fonte
Não sei como funciona, mas você também pode usá-lo para tabular seus valores!
Exemplo:
Claro, você pode substituir "isto!" com qualquer variável ou qualquer coisa significativa, assim como você também pode alterar a guia.
fonte
o sinal $ na sequência é para definição da sequência de interpolação que é um recurso em C # para interpolar a sequência é uma "sequência verdadeira" que pode conter expressões interpoladas
para obter mais informações, esta é a fonte da resposta e o exemplo: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated
fonte