私はC#(.Net 2.0)の構造体の値を繰り返し処理できるようにしたいと考えています。これは、実行時に行われ、構造体内の可能な値についての知識はありません。構造体を反復処理するか?
Reflectionを使用して構造体の値をリストに追加するか、構造体をIEnumerableインタフェースを実装するデータ構造体に変換するかのどちらかの考えに沿って考えていました。誰でも任意のポインタを提供できますか?
ご協力いただきありがとうございます。
よろしく、 アンディ。
私はC#(.Net 2.0)の構造体の値を繰り返し処理できるようにしたいと考えています。これは、実行時に行われ、構造体内の可能な値についての知識はありません。構造体を反復処理するか?
Reflectionを使用して構造体の値をリストに追加するか、構造体をIEnumerableインタフェースを実装するデータ構造体に変換するかのどちらかの考えに沿って考えていました。誰でも任意のポインタを提供できますか?
ご協力いただきありがとうございます。
よろしく、 アンディ。
:あなたはこの能力を持つ構造体のセットを宣言したい場合は、それらがIEnumerable<KeyValuePair<string, object>>
を実装してGetEnumerator()
を定義することができますかおそらく?その場合は、Type.GetFields()
またはType.GetProperties()
の方法があります。
あなたは絶対にstructを使用する必要がありますか?これは、特に構造体に複数の値が含まれている場合は、C#での最適な設計の決定はめったにありません。
編集:はい、それは構造体が従来の理由で使用されているようです。
構造体のフィールドが公開されていない場合は、適切なBindingFlags(例:BindingFlags.Instance | BindingFlags.NonPublic
)を指定する必要があります。最も単純なレベルでは
すべての構造体で機能するようにするには、リフレクションを使用する必要があります。 ?構造体の中の様々なフィールドを - あなたは正確に何を意味する
yield return new KeyValuePair<string, object>("Field1", Field1);
yield return new KeyValuePair<string, object>("Field2", Field2);
// ... and so forth
、あなたがプロパティを反復処理したいと仮定:
PropertyInfo[] properties = myStructInstance.GetType().GetProperties();
foreach (var property in properties) {
Console.WriteLine(property.GetValue(myStructInstance, null).ToString());
}
は、リフレクションを使用した例についてsystem.reflection.propertyinfo
ドキュメントを参照してください。
私は、次のようなものを使用します。
[StructLayout(LayoutKind.Sequential)]
public struct MY_STRUCT
{
public uint aa;
public uint ab;
public uint ac;
}
MY_STRUCT pMS = new MY_STRUCT();
FieldInfo[] fields = pMS.GetType().GetFields();
foreach (var xInfo in fields)
Console.WriteLine(xInfo.GetValue(pMS).ToString());
あなたはyou'rが本当に代わりに、構造体の列挙型を意味しないよろしいです?。この場合、質問には何らかの意味があります –