Suponha que eu tenha uma string, por exemplo,
string snip = "</li></ul>";
Quero basicamente escrever várias vezes, dependendo de algum valor inteiro.
string snip = "</li></ul>";
int multiplier = 2;
// TODO: magic code to do this
// snip * multiplier = "</li></ul></li></ul>";
Edição: Eu sei que posso facilmente escrever minha própria função para implementar isso, eu só estava me perguntando se havia algum operador de string estranho que eu não sabia sobre
c#
string
extension-methods
Apesar
fonte
fonte
Respostas:
No .NET 4, você pode fazer isso:
fonte
operator*
representa. Para cada um deles, eu acho.Observe que se sua "string" é apenas um caractere, há uma sobrecarga do construtor de string para lidar com isso:
fonte
Infelizmente / felizmente, a classe string é selada para que você não possa herdar dela e sobrecarregar o operador *. Você pode criar um método de extensão:
fonte
Estou com o DrJokepu , mas se, por algum motivo, você quiser trapacear usando a funcionalidade incorporada, poderá fazer algo assim:
Ou, se você estiver usando o .NET 4:
Pessoalmente, eu não me incomodaria - um método de extensão personalizado é muito melhor.
fonte
Apenas por uma questão de integridade - aqui está outra maneira de fazer isso:
Acho que peguei esse no Stack Overflow há algum tempo, então não é minha ideia.
fonte
Você precisaria escrever um método - é claro, com o C # 3.0, poderia ser um método de extensão:
então:
fonte
string.Join
também - por que não apenas repetir n vezes? Muito mais direto.Um pouco tarde (e apenas por diversão), se você realmente quiser usar o
*
operador para este trabalho, poderá fazer o seguinte:E entao:
Note-se que, desde que você é capaz de encontrar um comportamento razoável para eles, você também pode lidar com outros operadores através de
StringWrap
classe, como\
,^
,%
etc ...PS:
Multiply()
créditos de extensão para @DrJokepu todos os direitos reservados ;-)fonte
Isso é muito mais conciso:
O espaço
using System.Text;
para nome deve ser importado nesse caso.fonte
fonte
Se você possui .Net 3.5, mas não 4.0, pode usar o System.Linq
fonte
String.Concat
, e na versão 3.5 também.ToArray()
. Receio que não seja a solução mais elegante.Como todo mundo está adicionando seus próprios exemplos do .NET4 / Linq, é melhor adicionar os meus. (Basicamente, DrJokepu's, reduzido a uma linha)
fonte
Ok, aqui está minha opinião sobre o assunto:
Estou sendo um pouco bobo, é claro, mas quando preciso ter tabulação nas classes geradoras de código, o Enumerable.Repeat faz isso por mim. E sim, a versão StringBuilder também está bem.
fonte
Aqui está minha opinião sobre isso apenas para referência futura:
fonte
ParallelEnumerable
em situações como esta.string.Join
precisa usar os elementos em ordem; portanto, paralelizar sua geração é desnecessário.