タグ付けされた質問 「reflection.emit」

13
クラスを動的に作成する方法は?
私はこのようなクラスを持っています: public class Field { public string FieldName; public string FieldType; } そしてList<Field>値を持つオブジェクト: {"EmployeeID","int"}, {"EmployeeName","String"}, {"Designation","String"} 次のようなクラスを作成します。 Class DynamicClass { int EmployeeID, String EmployeeName, String Designation } これを行う方法はありますか? これを実行時に生成してください。ファイルシステムに物理的なCSファイルを配置したくありません。

1
IntPtrをInt64に変換:conv.u8またはconv.i8?
私は、ILGeneratorを使用してILフラグメントを放出するのに役立つ拡張機能に取り組んでいExpressionます。整数変換の部分に取り掛かるまで、すべてが順調でした。私には本当に直感に反するものがあります。 conv.i8に変換するInt32ために使用UInt64 conv.u8に変換するUInt32ために使用Int64 これらはすべて、評価スタックが整数の符号を追跡しないためです。その理由は完全に理解しています。処理するのは少し難しいです。 今、私はを含む変換をサポートしたいと思いIntPtrます。長さが可変であるため、トリッキーになる必要があります。私はC#コンパイラーがそれをどのように実装するかを調べることにしました。 今特定に焦点を当てIntPtrにInt64変換。どうやら望ましい動作は次のとおりです。64ビットシステムでは何もしないか、32ビットシステムでは符号拡張します。 C#ではstruct native intによってラップされてIntPtrいるため、そのInt64 op_Explicit(IntPtr)メソッドの本体を確認する必要があります。以下は、.NETコア3.1.1のdnSpyによって逆アセンブルされます。 .method public hidebysig specialname static int64 op_Explicit ( native int 'value' ) cil managed { .custom instance void System.Runtime.CompilerServices.IntrinsicAttribute::.ctor() = ( 01 00 00 00 ) .custom instance void System.Runtime.Versioning.NonVersionableAttribute::.ctor() = ( 01 00 00 00 ) .maxstack 8 IL_0000: …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.