1

私のxml:

  <Configuration>
    <LaunchDebugger>false</LaunchDebugger>
    <RequestFolder>./Request</RequestFolder>
    <ResponseFolder>./Response</ResponseFolder>
    <Countries>
      <Country NumericCode="1FH" FileName="file1.xml">1</Country>
      <Country NumericCode="20H" FileName="file2.xml">2</Country>
      <Country NumericCode="" FileName="file3.xml">3</Country>
    </Countries>
  </Configuration>

国クラス:

public class Country
{
    public String Name { get; set; }
    public String NumericCode { get; set; }
    public String FileName { get; set; }
}

これは、LINQを使用してそこからオブジェクトを作成する方法です:

    CountryList = (from filter in Configuration.Descendants("Countries").Descendants("Country")
                    select new Country() 
                    {
                        Name = (string)filter.Value,
                        NumericCode = (string)filter.Attribute("NumericCode"),
                        FileName = (string)filter.Attribute("FileName")
                    }).ToList();

xml の解析が機能し、リストに 3 つの国すべてが表示されますが、リストの最後の項目として 1 つの余分な null オブジェクトも取得されます。

ここに画像の説明を入力

なぜそれが起こっているのでしょうか?

4

2 に答える 2

4

理由は単純List<T>です。デフォルトの容量は4です。容量は、サイズを変更せずに内部データ構造が保持できる要素の総数を取得または設定します。内部データ構造は単純な配列private Country[] _itemsであり、最初は長さが4になります。したがって、4番目の要素用に予約された場所があり、要素が割り当てられるまでnullになります。ただし、心配しないで3ください。チェックすると、要素数が増えます。

これは、パブリック(3つのアイテム)と内部データ構造(容量サイズの配列)の両方を示す画像です。

リストの内部構造

于 2012-12-06T08:30:45.177 に答える
1

TrimExcessメソッドを使用して容量を減らしてカウントに一致させることができますが、現在の質問のように要素が 4 つ未満の場合、これは機能しません。

関連リンク:
Capasityメソッド - http://msdn.microsoft.com/en-us/library/y52x03h2(v=vs.100).aspx
TrimExcessメソッド - http://msdn.microsoft.com/en-us/library /ms132207(v=vs.100).aspx 既定の容量
に関する質問-リストの既定の容量

于 2012-12-06T09:43:42.727 に答える