4

(string)int32が常にスローされるのはなぜですか:タイプ'int'を'string'に変換できません

public class Foo
    {   
        private int FooID;
        public Foo()
        {
            FooID = 4;
            string s = (string)FooID; //throws compile error
            string sss = FooID.ToString(); //no compile error
        }
    }
4

9 に答える 9

39

Int32から文字列への型変換が定義されていないためです。それがToStringメソッドの目的です。

于 2009-01-30T15:16:00.390 に答える
21

これを行った場合:

string s = (string)70;

あなたはsに何を期待しますか?

A. 「70」は人間が読む方法で書かれた数字です。
B. 「+70」は、前にプラス記号を付けて書かれた数字です。C. 「F」はASCII コード 70
で表される文字。 D. "\x00\x00\x00F" int の 4 バイトがそれぞれ個別に ASCII 表現に変換されます。 E. "\x0000F" int は、それぞれが Unicode 文字を表す 2 バイトの 2 つのセットに分割されます。 F. "1000110" は 70 の 2 進数表現。 G. "$70" は通貨に変換された整数 H. 何か他のもの。




コンパイラはそれを知ることができないため、長い道のりを歩ませます。

2つの「長い道」があります。1 つ目は、次のような Convert.ToString() オーバーロードの 1 つを使用することです。

string s = Convert.ToString(-70, 10);

これは、基数 10 表記を使用して数値を文字列に変換することを意味します。数値が負の場合は先頭に「-」が表示され、それ以外の場合は数値のみが表示されます。ただし、2 進数、8 進数、16 進数に変換すると、負の数は2 の補数で表示されるため、Convert.ToString(-7, 16) は "ffffffba" になります。

もう 1 つの「長い道のり」は、次のような文字列フォーマッタで ToString を使用することです。

string s2 = 70.ToString("D");

D はフォーマッタ コードであり、ToString メソッドに文字列への変換方法を指示します。興味深いコードの一部を以下に示します。

"D" 必要に応じて先頭に "-" を付けた 0 ~ 9 の 10 進形式。たとえば、-70 は「-70」になります。
"D8" 8 を示しましたが、任意の数である可能性があります。decimal と同じですが、必要な長さになるまでゼロが埋め込まれます。たとえば、-70 は「-00000070」になります。
"N" 千区切りが挿入され、最後に ".00" が追加されます。たとえば、-1000 は「-1,000.00」になります。
"C" "-" の後に通貨記号が最初に追加され、"N" と同じになります。たとえば、en-Gb カルチャを使用すると、-1000 は "-£1,000.00" になります。
"X" 16 進形式。たとえば、-70 は「46」になります。

注:これらの形式は現在のカルチャ設定に依存するため、en-Us を使用している場合、形式コード「C」を使用すると「£」ではなく「$」が表示されます。

フォーマット コードの詳細については、MSDN - 標準数値フォーマット文字列を参照してください。

于 2009-01-30T15:45:25.493 に答える
11

のようなキャスト操作を実行するとき(string)30は、基本的に、「このオブジェクトは、キャスト先のオブジェクトと十分に似ているため、データ/機能をあまり失うことはありません」とコンピューターに伝えています。

数値を文字列にキャストすると、データに「損失」があります。文字列は数学演算を実行できず、数値に関連することもできません。

そのため、これを行うことができます:

int test1 = 34;
double test2 = (double)test1;

しかし、これではありません:

int test1 = 34;
string test2 = (string)test1;

(IIRC) ここでの変換は暗黙的であるため、この例は完全ではありませんが、double に変換するときに情報を失うことはありません。そのデータ型は、それが であろうと であろうと、基本的に同じように振る舞うことができdoubleますintintanから aについても同じことは言えませんstring

キャストは (通常) 変換後に多くの機能が失われない場合にのみ許可されます。

このメソッドは、データ型.ToString()を返すメソッドであるため、キャストとは異なります。string

于 2009-01-30T15:22:34.777 に答える
5

Intには、文字列に対する明示的な演算子はありません。ただし、Int32.ToString();があります。本当に必要な場合は、Extensionメソッドを使用して作成できます。

于 2009-01-30T15:16:13.540 に答える
4

C# は int を文字列に変換する方法を認識していないため、ライブラリ (.ToString) は認識しています。

于 2009-01-30T15:16:38.080 に答える
2

私はちょうど答えを見つけました。ToString は、int 変数に対して正常に機能します。ブラケットを必ず追加する必要があります。

つまり...

int intMyInt=32;

string strMyString = intMyInt.ToString();
于 2010-08-24T10:40:35.390 に答える
-1

VB .net は、int から string へのキャストを完全に実行できます... 実際、Java も同様です。C# に問題があるのはなぜですか? 計算で数値を使用し、結果を文字列形式で表示する必要がある場合があります。計算結果を TextBox に表示するには、他にどのような方法がありますか?

ここでの回答は意味がありません。int を文字列としてキャストする方法が必要です。

于 2010-08-24T10:34:35.670 に答える