.NET'te ben \r
veya \n
dize değişmezleri sağlayabilir , ancak Environment.NewLine
statik özellik gibi "yeni satır" özel karakter gibi bir şey eklemek için bir yolu var mı?
.NET'te ben \r
veya \n
dize değişmezleri sağlayabilir , ancak Environment.NewLine
statik özellik gibi "yeni satır" özel karakter gibi bir şey eklemek için bir yolu var mı?
Yanıtlar:
Basit seçenekler:
string.Format
:
string x = string.Format("first line{0}second line", Environment.NewLine);
Dize birleştirme:
string x = "first line" + Environment.NewLine + "second line";
Dize enterpolasyonu (C # 6 ve üzeri):
string x = $"first line{Environment.NewLine}second line";
Ayrıca her yerde \ n kullanabilirsiniz ve şunu değiştirebilirsiniz:
string x = "first line\nsecond line\nthird line".Replace("\n",
Environment.NewLine);
Değerini yalnızca yürütme zamanında kullanılabilir olacağından , bunu bir dize sabit yapamayacağınızı unutmayın Environment.NewLine
.
Environment.NewLine
? Tam tersine, bunu kullanmak için iyi bir uygulamadır
İçinde Environment.NewLine içeren bir const dizesi istiyorsanız, bunun gibi bir şey yapabilirsiniz:
const string stringWithNewLine =
@"first line
second line
third line";
Bu bir sabit dizgide olduğu için derleme zamanında yapılır, bu nedenle derleyicinin bir satırsonu yorumudur. Bu davranışı açıklayan bir referans bulamıyorum ama amaçlandığı gibi çalıştığını kanıtlayabilirim. Bu kodu hem Windows hem de Ubuntu'da (Mono ile) derledikten sonra demonte ettik ve sonuçlar:
Gördüğünüz gibi, Windows'ta yeni satırlar \ r \ n ve Ubuntu'da \ n olarak yorumlanıyor
var sb = new StringBuilder();
sb.Append(first);
sb.AppendLine(); // which is equal to Append(Environment.NewLine);
sb.Append(second);
return sb.ToString();
first + Environment.NewLine + second
daha verimli ve (IMO) okunması daha kolay kullanmak yerine neden yapasınız ki ?
String.Format
kerede 1 dize üretecek düşündüm (ama iç kültür biraz birleştirme, vb nedeniyle biraz yavaş), dize birleştirme - 1 sonuç + 1 geçici, değil mi?
String.Concatenate
doğrudan dönüştürür , bu da sadece bir çıkış dizesi oluşturur (IIRC, dizeler değişmezse derleme derleyicide yapılır.
"a"+b+"c"+d
vb.) Tek bir diziye eşit mi? Ya da sadece dönüştürülmüş String.Concatenate(a,b,c,d,etc)
, değil mi?
string.Format
yorumda önermedim . Derleyici arayacağı için dize birleştirme geçici dizeler üretmez string.Concat(first, Environment.NewLine, second)
.
Biçim dizgisine Ortam.YeniLine'nin uygun bir şekilde yerleştirilmesinin bir başka yolu. Buradaki fikir, dizeyi her zamanki gibi biçimlendiren ancak metindeki {nl} yerine Environment.NewLine ile yer değiştiren dize genişletme yöntemi oluşturmaktır.
kullanım
" X={0} {nl} Y={1}{nl} X+Y={2}".FormatIt(1, 2, 1+2);
gives:
X=1
Y=2
X+Y=3
kod
///<summary>
/// Use "string".FormatIt(...) instead of string.Format("string, ...)
/// Use {nl} in text to insert Environment.NewLine
///</summary>
///<exception cref="ArgumentNullException">If format is null</exception>
[StringFormatMethod("format")]
public static string FormatIt(this string format, params object[] args)
{
if (format == null) throw new ArgumentNullException("format");
return string.Format(format.Replace("{nl}", Environment.NewLine), args);
}
Not
ReSharper'ın parametrelerinizi vurgulamasını istiyorsanız, yukarıdaki yönteme nitelik ekleyin
[StringFormatMethod ( "biçimi")]
Bu uygulama sadece String.Format'tan daha az verimlidir
Belki bu soruyla ilgilenen bir sonraki soruya da ilgi duyacaktır: C # olarak adlandırılmış dize biçimlendirme
string myText =
@"<div class=""firstLine""></div>
<div class=""secondLine""></div>
<div class=""thirdLine""></div>";
Bu değil:
string myText =
@"<div class=\"firstLine\"></div>
<div class=\"secondLine\"></div>
<div class=\"thirdLine\"></div>";
static class MyClass
{
public const string NewLine="\n";
}
string x = "first line" + MyClass.NewLine + "second line"
Environment.NewLine
- diğer yanıtlara bakın.
const string
daha yeni .net sürümleri, değişkenleri aşağıdaki gibi kullanmanıza izin veren değişmezin önünde $ kullanmanızı sağlar:
var x = $"Line 1{Environment.NewLine}Line 2{Environment.NewLine}Line 3";
Yeni Çizgi dizesini gerçekten bir sabit olarak istiyorsanız, bunu yapabilirsiniz:
public readonly string myVar = Environment.NewLine;
C # içindeki salt okunur anahtar kelimenin kullanıcısı, bu değişkenin yalnızca bir kez atanabileceği anlamına gelir. Üzerinde belgeleri burada bulabilirsiniz . Yürütme süresine kadar değeri bilinmeyen sabit bir değişkenin bildirilmesine izin verir.
Web uygulamasıyla çalışıyorsanız bunu deneyebilirsiniz.
StringBuilder sb = new StringBuilder();
sb.AppendLine("Some text with line one");
sb.AppendLine("Some mpre text with line two");
MyLabel.Text = sb.ToString().Replace(Environment.NewLine, "<br />")
Soruyu anlarsam: "\r\n"
Aşağıdaki yeni satırı almak için bir çift textbox
. Örneğim çalıştı -
string s1 = comboBox1.Text; // s1 is the variable assigned to box 1, etc.
string s2 = comboBox2.Text;
string both = s1 + "\r\n" + s2;
textBox1.Text = both;
Tipik bir cevap olabilir s1
s2
de text box
kullanarak tanımlı tür stili.