[解決済み] C#のSystem.TypeとSystem.RuntimeTypeの違いは何ですか?
質問
私は今日、いくつかの規約テストを行おうとしていました。そして、アセンブリ内のすべての型を取得しました(これは
Assembly.GetTypes()
を呼び出すことによって)、何かでつまずいたとき。
System.RuntimeType:[First.Namespace.FirstClass]
と比較しようとすると、その型は
typeof(FirstClass)
と比較しようとすると、両者は等しくありません。そのため
FirstClass
をジェネリックパラメータとして含むすべての型を見つけようとすると、何も見つかりません。
との違いは何ですか?
System.RuntimeType
と
System.Type
?
私の問題を解決する方法はありますか?
どのように解決するのですか?
System.RuntimeType
は、抽象ベースクラス
System.Type
. このため
System.RuntimeType
は公開されないので、通常このインスタンスは
System.Type
.
オブジェクトの型を取得しようとしたときに、誤って
GetType()
を誤って呼んでしまった場合、混乱が生じます。その場合
Type.ToString()
は
"System.RuntimeType"
は、呼び出されたオブジェクトがTypeを表現している場合に
string str = string.Empty;
Type strType = str.GetType();
Type strTypeType = strType.GetType();
strType.ToString(); // returns "System.string"
strTypeType.ToString(); // returns "System.RuntimeType"
例えば このブログの記事 では、誰かがデータベースのカラムの型を取得しようとして、次のようなことをしています。
object val = reader.GetFieldType(index);
Type runtimeType = val.GetType();
PropertyInfo propInfo = runtimeType.GetProperty("UnderlyingSystemType");
Type type = (Type)propInfo.GetValue(val, null);
valはすでにTypeオブジェクトなので、val.GetType()は、型を表す別のTypeオブジェクトを返します。
System.RuntimeTime
という型を表す別のTypeオブジェクトを返します。ブログの記事では、元の型オブジェクトの型を取得するために、不必要な反射のトリックを示していますが、実際には必要なのはそれだけです。
Type type = reader.GetFieldType(index) as Type;
ということは、もしあなたの
Type
オブジェクトを表すと報告されています。
System.RuntimeType
を表すと報告しています。
GetType()
を誤って呼んでいないか確認してください。
関連
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] フィールドとプロパティの違いは何ですか?
-
[解決済み] 2つの日付の差(日数)を計算する?
-
[解決済み] SelectとSelectManyの違い
-
[解決済み] キーワード「ref」と「out」の違いは何ですか?
-
[解決済み] int.Parse()とConvert.ToInt32の主な違いは何ですか?
-
[解決済み] instanceofとClass.isAssignableFrom(...)の違いは何ですか?
-
[解決済み】Invoke()とBeginInvoke()の違いは何ですか?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み] エンティティタイプ ApplicationUser は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】「namespace」なのに「type」のように使われる。