次のコードを考える:配列型(.IsArrayがtrueを返す型)を考えるタイプを区別する方法:Int32 []&Int32 [*]?
var type1 = typeof(int[]); // Int32[]
var type2 = Array.CreateInstance(elementType: typeof(int),
lengths: new [] {0},
lowerBounds: new []{1}).GetType(); // Int32[*]
を、どのように確実に配列型のもの二種類が区別さができますか?
好ましくは、ハッキングされたソリューションを使用しないでください(タイプのインスタンス化や名前の「*」の検索など)。
コンテキスト:私はシリアライザを構築していますが、これはすべてのタイプに対応するために必要です。したがって、== typeof(int [])のような定数比較は機能しません。
'type.IsArrayを!? "配列ではない":type.GetArrayRank()> 1? "多次元配列":type == type.GetElementType()。MakeArrayType()? "ゼロベースの配列": "非ゼロベースの配列" – PetSerAl
このような質問にはもう少しコンテキストが必要ですが、型名に文字列比較を使用することは勧めませんが、質問に対する明白な答えはtype2です! = typeof(int [])。これらの型や変数がどこから得られているのかというコンテキストがもっとわかれば、ちょっとした情報が得られます。 –
@PetSerAlそれは素晴らしい答えです!あまりにもそれを試していただきありがとうございます。 &Chris Schaller私はシリアライザを構築しているので、すべての型で動作する必要があるので、typeof(int [])の定数チェックがうまくいかないので、それを私の質問に追加します。 – hl3mukkel