2009-09-04 10 views
2

MSDNドキュメントでは、値の種類のみがボクシングが必要だと言いますが、これは値の型でありボックス化する必要のない文字列には適用されません。私は最初にType.IsValueTypeを試しましたが、それは文字列に対してtrueを返すので、型を本当にボックス化する必要があるかどうかを判断するためには使用できません。あなたが知っている他の方法はありますか?文字列は例外ですか?タイプをボックス化する必要があるかどうかを判断する方法は?

更新:intを参照しているコードで間違いを犯しました。文字列であると思いました。文字列は実際に値の型です、みんなに指摘してくれてありがとう!

+0

文字列を文字列に囲む必要はないと思いますか? –

+7

私の世界では、 'typeof(string).IsValueType'は' false'を返します。文字列はクラスです。それはInt32のような構造体ではありません。 –

+1

@Filip:Stringはクラスであり、既にヒープに割り当てられています.Netは文字列データを保持するためにスタックからの領域を割り当てません。 – AnthonyWJones

答えて

8

あなたの前提が間違っています。 Stringは実際には多くのシナリオで値型のように機能する参照型です。 Type.IsValueTypeは、値がボックス化される必要があるかどうかを判断する最も信頼できる方法です。

しかし、null値を扱う場合は注意が必要です。

+0

ええ、そうです。私はちょうど文字列であると思っている間にintを参照していたコードにバグがあったことに気づいた。 –

1

生ILを書いていますか?それはあなたがボクシングに心配する必要がある唯一のケースです。

+1

パフォーマンスクリティカルなコードを実行したことはありませんか? –

+0

はい、私は実際に生のILを書いています。それが私が求めていた理由です。 –

+0

ヘルマンを忘れないでください。intはi4の組み込み関数であり、しばしばボクシングなしで組み込み関数として操作できます。 – user168785

関連する問題