次の XML データを読み込んでいます。
<Settings>
<Display_Settings>
<Camera>
<Name Name="" />
<CameraTag Tag="1" />
<LocalPosition X="1" Y="1" Z="1" />
<Orientation Yaw="1" Pitch="1" Roll="1" />
<Far Far="1" />
<Near Near="1" />
<FOV FOV="1" />
<AspectRatio AspectRatio="1" />
<ScreenDistance ScreenDistance="1" />
</Camera>
<Camera>
<Name Name="Camera1" />
<CameraTag Tag="2" />
<LocalPosition X="2" Y="2" Z="2" />
<Orientation Yaw="2" Pitch="2" Roll="2" />
<Far Far="2" />
<Near Near="2" />
<FOV FOV="2" />
<AspectRatio AspectRatio="1" />
<ScreenDistance ScreenDistance="2" />
</Camera>
</Display_Settings>
</Settings>
次に、Unity プログラムでこれらの値を読み取り、次のように Dictionary に入力します (完全な方法ではなく、いくつかの方法のみを実行します)。
public struct Entry
{
public System.Object value;
public Type type;
}
void UpDate()
{
var xdoc = XDocument.Load(@"C:\\Test.xml");
var cameras = xdoc.Descendants("Camera");
foreach (var camera in cameras)
{
// reading in values from XML
HV_Camera _camera = new HV_Camera();
_camera.Name = (string)camera.Element("Name").Attribute("Name");
_camera.Tag = (string)camera.Element("CameraTag").Attribute("Tag");
// filling out a dictionary
_cameraEntry.type = typeof(string);
_cameraEntry.value = (string)camera.Element("Name").Attribute("Name");
cameraDictionary.Add("CameraName", _cameraEntry);
_cameraEntry.type = typeof(string);
_cameraEntry.value = (string)camera.Element("CameraTag").Attribute("Tag");
cameraDictionary.Add("CameraTag", _cameraEntry);
}
}
今、保存された値を割り当てる前に、辞書が正しく入力されているかどうかを確認するためのチェックを実行しようとしています。しかし、プログラムを実行すると、次のエラーが発生します。
ArgumentException: 同じキーを持つ要素が辞書に既に存在します。System.Collections.Generic.Dictionary`2[System.String,Entry].Add (System.String キー、エントリ値)
誰かがこの問題を克服する方法を教えてもらえますか? XMLに2つのカメラフレームワークがあるためだと思いますが、辞書を使用するとすべてをうまく保存できると思いました。
私もチェックを実行しましたが、私の XML は読み込まれます。したがって、それは問題ではありません。
これがばかげた質問であれば申し訳ありません。このレベルで辞書を使うのは初めてです。
編集
申し訳ありませんが、値を読み取る際に試したコードを追加するのを完全に忘れていました。
foreach (KeyValuePair<string, Entry> pair in settings.cameraDictionary)
{
if (pair.Key == "FOV")
{
Debug.Log("This is a test!!!");
}
}
if (settings.cameraDictionary.ContainsKey("CameraName"))
{
Debug.Log("This is a test!!!");
}