intを文字列に変換しますか?


499

C#でデータ型をintデータ型に変換するにはどうすればよいstringですか?

回答:


741
string myString = myInt.ToString();

4
これに関する私の問題は、型の安全性を失うことです。myIntは何でもかまいません。ここで整数を取り、それを文字列に変換することはありません。myIntはオブジェクトである可能性があり、オブジェクトを文字列に変換することはできません。これはコンパイル時にわかっていますが、実行時例外が発生することさえなく、不良データを許可するだけです。
ティモシーゴンザレス

3
@TimothyGonzalezこれは、.ToString()を呼び出す場合は通常、文字列である必要があり、文字列である可能性があるため、これは通常のケースです。
EpicKip 2017

35
@nfgallimoreこれは有効なエッジケースではなく、この状況ではエッジケースすらありません。OPは、文字列に変換したいint型があると述べました。それがint型の場合、プレーンでシンプルな値はintです。コンパイラは、そうであることを保証します。どのようにその正接を始めたのかさえわかりません。OPは、ランダム参照が整数であることを確認し、それを文字列に変換する方法を尋ねませんでした。おそらくその場合、あなたはポイントを持っていますが、そうではありません。
AaronM

1
このソリューションは、null値の例外をスローします。
Mehdi Dehghani

18
この回答に対するコメントはばかげています。

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
また、これを行うことができますstring count = "" + intCount;
Dion Dirza 2013年

2
これらすべてのソリューションは同等に効率的ですか?私はi.ToString()がintの不必要なボクシングを行うと想像しますが、おそらくそれはとにかく最適化されています。
スティーブンホルト

43
.ToString()変換を行う最も効率的な方法です。ここに示されている他のすべてのメソッドは.ToString()いずれにせよ最終的に呼び出されます。
Xavier Poinas 2013

6
あなたが変数を再宣言し続けるという事実に少し不安を感じていますs
thecoshman

1
@XavierPoinas「ToString()」を呼び出す可能性がありますが、最も効率的な方法は、それを使用して何を行うかによって多少異なります。 string s = "xyz" + i;新しい「xyz」文字列を作成します-整数を含む新しい文字列を作成します。次に、2つの連結を含む3番目の文字列を作成します。 string.Format("xyz{0}", i);一方、インラインで連結しているため、2つの文字列のみを生成できます。このパフォーマンスは、ストリングが長くなるほど顕著になります。
UKMonkey

32

バイナリ表現が必要で、昨夜のパーティーからまだ酔っている場合に備えて:

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();
}

注:エンディアンをうまく処理しないことについての何か...

編集:速度を上げるためにメモリを少し犠牲にしても構わない場合は、以下を使用して、事前に計算された文字列値を持つ配列を生成できます。

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

オブジェクトのToStringメソッドは、そのオブジェクトの文字列表現を返すことになっています。

int var1 = 2;

string var2 = var1.ToString();

10

@Xavier の応答の詳細については、100反復から21,474,836反復までの変換を実行するいくつかの異なる方法の比較高速化するページを次に示します。

それはほとんどの間の結びつきのようです:

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



4

このToString()方法整数式に適用できるとの回答はありませんでした

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

でもへの整数リテラル

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

このような整数リテラルは、コーディングスタイル(マジックナンバー)が悪いと見なされることがよくありますが、この機能が役立つ場合があります...


3
using System.ComponentModel;

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

この答えは、おそらくコードを説明しなかったために、低品質のレビューキューで判明しました。(回答で)説明すると、投票数が増える可能性が高くなります。質問者は実際に何かを学びます。
帽子をかぶった男

5
@TheGuywithTheHatここでの回答には、コード、特にこの非常に支持されている回答のすべてのコードサンプルの説明がないことに気づくでしょう。正直なところ、私たちは受け入れられた答え以外には何も必要ありませんi.ToString-残りは完全性と楽しさのためにここにのみあります。
nmclean

2
他の回答に説明がないことは、すべての回答に説明がないことを意味するわけではありません。私がこの特定の回答についてコメントした唯一の理由は、低品質のレビューキューで見たからです。
帽子をかぶった男

@TheGuywithTheHat他の人がいるために私の答えが不完全になる可能性があることを示唆していませんでした。この質問の文脈では意図が明らかであるため、これらのどれも(これも含めて)はありません。
nmclean

2
@reggaeguitarこれはほとんど冗談の答えです。私たちは、最も基本的なタスクの1つを実行するための、あいまいな方法を意図的に追加していました。しかし、あなたの質問に対して、この方法の利点は、事前に型がわからない場合です-代わりにtypeof(int)typeof(string)型変数を持っている可能性があり、存在する場合はいつでも適切なコンバーターを見つけて使用します。
nmclean

1
string s = "" + 2;

そしてあなたは次のような素晴らしいことをすることができます:

string s = 2 + 2 + "you" 

結果は次のようになります。

「4あなた」

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.