4

私はstructそのように持っています

public struct InstrumentDefinition2
{
    public int instrumentId;
    public int Decimals;
    public long MinPriceIncrement_Mantissa;
    public short MinPriceIncrement_Exponent;
    public long RoundLot_Mantissa;
    public short RoundLot_Exponent;
    public char MsgType;        // 'd' - Security Definition 'f' - Security Status?
}

[UnmanagedFunctionPointer(CallingConvention.StdCall)]
public delegate void InstrumentReplayCallback(ref InstrumentDefinition2 value);

デリゲート呼び出しを介して、この c++ 構造体から構築されます。

typedef struct _InstrumentDefinition {
    int32_t instrumentId;
    int32_t Decimals;
    int64_t MinPriceIncrement_Mantissa;
    int16_t MinPriceIncrement_Exponent;
    int64_t RoundLot_Mantissa;
    int16_t RoundLot_Exponent;
    char MsgType;        // 'd' - Security Definition 'f' - Security Status
} InstrumentDefinition;

それは正常に動作します。InstrumentDefinition2 を として宣言できるかどうかわかりませんclassInstrumentDefinition2しかし、私はとして宣言するのが好きstructで、「メモリの c++ ブロックへのポインタ」について考えています。

しかし、処理中にクラスにコピーする必要があります。だから私は非常によく似たC#クラスを宣言したい:

public class InstrumentDefinition
{
    public int instrumentId;
    public int Decimals;
    public long MinPriceIncrement_Mantissa;
    public short MinPriceIncrement_Exponent;
    public long RoundLot_Mantissa;
    public short RoundLot_Exponent;
    public char MsgType;        // 'd' - Security Definition 'f' - Security Status?
}

InstrumentDefinition2問題は、構造体をInstrumentDefinitionクラスにコピーするにはどうすればよいですか? もちろん、すべてのフィールドを 1 つずつ割り当てることができますが、次のようになります。

  • 比較的遅いと思います
  • エラーが発生しやすい (新しいフィールドが導入され、その「対処」を追加するのを忘れた場合はどうなりますか?)

では、すべてのフィールドに対処することなく、どうにかしてそれを行うことができますか?

4

2 に答える 2

0

自動フィールド/プロパティ値のコピーには、AutomoapperValue injecterなどを使用します。あなたの場合、値インジェクターを使用して値をコピーすると、次のようになります。

instrumentDefinition.InjectFrom(instrumentDefinition2);

変数名がクラス名と構造体名に対応していると仮定します。

于 2013-06-12T09:15:28.510 に答える