İnt dizeye dönüştürülsün mü?


Yanıtlar:


741
string myString = myInt.ToString();

4
Benim sorunum, tip güvenliğinizi kaybetmeniz. myInt herhangi bir şey olabilir. Burada hiçbir şey bir tam sayı almaz ve onu bir dizgeye dönüştürmez. myInt bir nesne olabilir ve bir nesne bir dizeye dönüştürülemez. Bu derleme zamanında bilinir, ancak bir çalışma zamanı istisnasını bile yükseltmez, sadece kötü verilere izin verir.
Timothy Gonzalez

3
@TimothyGonzalez .ToString () öğesini çağırırsanız, genellikle dize olmanız gerektiğinden ve bir dize olabileceğinden bu bir uç durumdur.
EpicKip

35
@nfgallimore Geçerli bir kenar durumu değil, bu durumda bir kenar durumu bile değildir. OP, bir dizeye dönüştürmek istediği bir int türüne sahip olduğunu belirtti. Bir int türüyse, o zaman düz ve basit değer bir int'tir. Derleyici durumun böyle olmasını sağlayacaktır. O teğete nasıl gittiğini bile bilmiyorum. OP, rastgele bir başvurunun bir tamsayı olduğundan nasıl emin olunacağını sormadı ve sonra onu bir dizeye dönüştürdü. Belki de bu durumda bir noktanız var, ama durum böyle değil.
AaronM

1
Bu çözüm nulldeğerler için istisna oluşturur .
Mehdi Dehghani

18
Bu cevap hakkındaki yorumlar çok saçma.

524
string s = i.ToString();
string s = Convert.ToString(i);
string s = string.Format("{0}", i);
string s = $"{i}";
string s = "" + i;
string s = string.Empty + i;
string s = new StringBuilder().Append(i).ToString();

6
Ayrıca bunu yapabilirsinizstring count = "" + intCount;
Dion Dirza

2
Tüm bu çözümler eşit derecede verimli mi? İ.ToString () 'in int'in gereksiz bazı bokslarını yaptığını düşünürdüm, ama belki de yine de optimize edilmiştir.
Stephen Holt

43
.ToString()dönüşüm yapmanın en etkili yoludur. Burada sunulan diğer tüm yöntemler sonunda .ToString()yine de arayacaktır .
Xavier Poinas

6
Değişkeni yeniden beyan etmeye devam s
etmenizden

1
@XavierPoinas "ToString ()" olarak adlandırılsalar da, onunla en verimli olanı olarak ne yapmayı planladığınıza bağlıdır. string s = "xyz" + i;yeni bir "xyz" dizesi oluşturur - tamsayınızı içeren yeni dizeyi oluşturur; ve sonra 2 bitişik içeren bir 3. dize oluşturun. string.Format("xyz{0}", i);Öte yandan, sadece 2 dize üretebilir - bunları satır içinde birleştirdiği için. Dizeler uzadıkça bu performans daha belirgin hale gelir.
UKMonkey

32

İkili temsili istemeniz ve dün gece partisinden hala sarhoş olmanız durumunda:

private static string ByteToString(int value)
{
    StringBuilder builder = new StringBuilder(sizeof(byte) * 8);
    BitArray[] bitArrays = BitConverter.GetBytes(value).Reverse().Select(b => new BitArray(new []{b})).ToArray();
    foreach (bool bit in bitArrays.SelectMany(bitArray => bitArray.Cast<bool>().Reverse()))
    {
        builder.Append(bit ? '1' : '0');
    }
    return builder.ToString();
}

Not: Endianness'i çok iyi işlememe hakkında bir şey ...

Düzenleme: Hız için biraz bellek feda etmek sakıncası yoksa, önceden hesaplanan dize değerleri olan bir dizi oluşturmak için aşağıdaki kullanabilirsiniz:

static void OutputIntegerStringRepresentations()
{
    Console.WriteLine("private static string[] integerAsDecimal = new [] {");
    for (int i = int.MinValue; i < int.MaxValue; i++)
    {
        Console.WriteLine("\t\"{0}\",", i);
    }
    Console.WriteLine("\t\"{0}\"", int.MaxValue);
    Console.WriteLine("}");
}


14

Herhangi bir nesnenin ToString yönteminin o nesnenin dize olarak temsilini döndürmesi beklenir.

int var1 = 2;

string var2 = var1.ToString();

10

Ayrıca @ Xavier'in cevabına, 100 tekrardan 21.474.836 iterasyona kadar dönüşüm yapmanın birkaç farklı yolu arasında hız karşılaştırmaları yapan bir sayfa var .

Oldukça büyük bir kravat gibi görünüyor:

int someInt = 0;
someInt.ToString(); //this was fastest half the time
//and
Convert.ToString(someInt); //this was the fastest the other half the time

9
string str = intVar.ToString();

Bazı durumlarda, kullanmak zorunda değilsiniz ToString()

string str = "hi " + intVar;


4

Yanıtların hiçbiri, ToString()yöntemin tamsayı ifadelerine uygulanabileceğini söylemedi

Debug.Assert((1000*1000).ToString()=="1000000");

tam sayılara bile

Debug.Assert(256.ToString("X")=="100");

Bunun gibi tamsayı değişmezleri genellikle kötü kodlama stili ( sihirli sayılar ) olarak kabul edilmesine rağmen, bu özelliğin yararlı olduğu durumlar olabilir ...


3
using System.ComponentModel;

TypeConverter converter = TypeDescriptor.GetConverter(typeof(int));
string s = (string)converter.ConvertTo(i, typeof(string));

Bu cevap, muhtemelen kodu açıklamadığınız için düşük kaliteli inceleme sırasında ortaya çıktı. Bunu açıklarsanız (cevabınızda), daha fazla oy alma olasılığınız daha yüksektir ve soru soran kişi aslında bir şeyler öğrenir!
Şapkalı Adam

5
@TheGuywithTheHat Buradaki yanıtların hiçbirinin, özellikle bu son derece yükseltilmiş yanıttaki tüm kod örneklerinin herhangi bir açıklamasına sahip olmadığını fark edeceksiniz , çünkü hepsinin ne yapması gerektiği açıktır: int'i bir dizeye dönüştürmek. Doğrusu, kabul edilen cevabın ötesinde bir şeye ihtiyacımız yok - i.ToString- geri kalanı sadece bütünlük ve eğlence uğruna burada.
nmclean

2
Diğer cevaplarda açıklama olmaması, tüm cevapların açıklama olmaması gerektiği anlamına gelmez. Sadece bu özel yanıta yorum yapmamın tek nedeni düşük kaliteli inceleme sırasında gördüm.
Şapkalı Adam

@TheGuywithTheHat Cevabımın eksik olabileceğini öne sürmüyordum çünkü diğerleri; Ben bunların hiçbirinin (bu da dahil) olmadığını söylüyorum çünkü niyet bu soru bağlamında açıktır.
nmclean

2
@reggaeguitar Çoğunlukla bir şaka cevabı, bilerek en temel görevlerden birini yapmak için gittikçe daha belirsiz yöntemler ekledik. Yerine - önceden türlerini bilmiyordum Ama sorunuza bu yöntemin avantajı olacağını typeof(int)ve typeof(string)sen Tip değişkenleri olabilir ve onu bulur ve varsa her uygun bir dönüştürücü kullanın.
nmclean

1
string s = "" + 2;

ve güzel şeyler yapabilirsiniz:

string s = 2 + 2 + "you" 

Sonuç:

"4 sen"

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.