*解決済み。説明してくれてありがとう、この状況で値型を使用することの意味を完全には理解していませんでした。
静的クラスから使用している構造体があります。ただし、実行時に内部状態を出力すると、動作が予期しない動作を示しています。ここに私の構造体があります:
public struct VersionedObject
{
public VersionedObject(object o)
{
m_SelectedVer = 0;
ObjectVersions = new List<object>();
ObjectVersions.Add(o);
}
private int m_SelectedVer;
public int SelectedVersion
{
get
{
return m_SelectedVer;
}
}
public List<object> ObjectVersions;//Clarifying: This is only used to retrieve values, nothing is .Added from outside this struct in my code.
public void AddObject(object m)
{
ObjectVersions.Add(m);
m_SelectedVer = ObjectVersions.Count - 1;
}
}
テストコード
VersionedObject vo = new VersionedObject(1);
vo.AddObject(2);//This is the second call to AddObject()
//Expected value of vo.SelectedVerion: 1
//Actual value of vo.SelectedVersion: 1
ここで、このコードを単独でテストする、つまりプロジェクトにコピーして試してみると、期待どおりの結果が返されます。
問題; 私の製品コードで観察しているのは、次のデバッグ出力です。
objectName, ObjectVersions.Count:2, SelectedVer:0,
なんで?私の理解とテストから、これはどのような状況でも完全に不可能なはずです。
私のランダムな推測では、ある種の不変性が起こっており、何らかの理由で新しい構造体がデフォルトのコンストラクターを介してインスタンス化されており、ObjectVersions データがコピーされていますが、m_SelectedVersion はプライベートであり、新しい構造体にコピーすることはできません。 ?
構造体を操作するための静的クラスとメソッドの使用は、それと関係がありますか?
私はとても困惑しており、現時点では勝手な推測をしているだけです。