1

MakeArrayType()配列など、特定の型の配列型を作成する場合は、使用しても問題ありませんchar

typeof(char).MakeArrayType()

もちろん、typeof(char[])代わりに使用する方がより直感的です。

そして、型のプロパティAssemblyは、型がどこにあるアセンブリかを教えてくれます。

したがって、次のコードは、アセンブリ内の型を見つけるための合理的な例です。

var chars=new[] { '\x20' };
var typeofCharArray=chars.GetType();
var assembly=typeofCharArray.Assembly;
var doesContain=assembly.GetTypes().Contains(typeofCharArray);

しかしdoesContain、そうではないと言います、それはfalse. これは、配列の型がMakeArrayType()またはtypeof()、またはインスタンスの に関係なく発生しますGetType

Assembly.GetTypesから読み取った他のアセンブリに転送された疑いがあります。そして私は試しました:

var assemblyContainsTypeOfCharArray=(
        from it in AppDomain.CurrentDomain.GetAssemblies()
        let types=it.GetTypes()
        where types.Contains(typeof(char[]))
        select it).FirstOrDefault();

興味深いのassemblyContainsTypeOfCharArraynull.

配列型はどこにありますか?

4

1 に答える 1

4

単純GetTypes()に、そのアセンブリで実際に宣言されている型を返します。配列型は...ではありません。彼らはそこから来たと主張Assemblyしていますが、それは要素タイプの情報を返しているだけです。配列型は実際に はそこで宣言されていません (実際にはどこでも宣言されていません- これはオンザフライでの JIT の発明です)。

つまり、基本的に: 配列型は liesです。それを恥じてください。

于 2013-07-29T19:34:21.200 に答える