23

私はこのような列挙子を持っています

IEnumerable<System.Windows.Documents.FixedPage> page;

ページ (例: D:\newfile.txt) を追加するにはどうすればよいですか? などを試しましAddたが、何もうまくいきませんでした。AppendConcat

4

7 に答える 7

8

IEnumerable<T>コレクションを変更する方法は含まれていません。

これらには追加機能と削除機能が含まれているため、ICollection<T>またはのいずれかを実装する必要があります。IList<T>

于 2013-04-02T09:43:35.490 に答える
8

はい、可能です

シーケンス (IEnumerables) を連結し、連結結果を新しいシーケンスに割り当てることができます。(元の順序を変更することはできません。)

ビルトインはEnumerable.Concat()別のシーケンスを連結するだけです。ただし、スカラーをシーケンスに連結できる拡張メソッドを作成するのは簡単です。

次のコードは、次のことを示しています。

using System;
using System.Collections.Generic;
using System.Linq;

namespace Demo
{
    public class Program
    {
        [STAThread]
        private static void Main()
        {
            var stringList = new List<string> {"One", "Two", "Three"};

            IEnumerable<string> originalSequence = stringList;

            var newSequence = originalSequence.Concat("Four");

            foreach (var text in newSequence)
            {
                Console.WriteLine(text); // Prints "One" "Two" "Three" "Four".
            }
        }
    }

    public static class EnumerableExt
    {
        /// <summary>Concatenates a scalar to a sequence.</summary>
        /// <typeparam name="T">The type of elements in the sequence.</typeparam>
        /// <param name="sequence">a sequence.</param>
        /// <param name="item">The scalar item to concatenate to the sequence.</param>
        /// <returns>A sequence which has the specified item appended to it.</returns>
        /// <remarks>
        /// The standard .Net IEnumerable extensions includes a Concat() operator which concatenates a sequence to another sequence.
        /// However, it does not allow you to concat a scalar to a sequence. This operator provides that ability.
        /// </remarks>

        public static IEnumerable<T> Concat<T>(this IEnumerable<T> sequence, T item)
        {
            return sequence.Concat(new[] { item });
        }
    }
}
于 2013-04-02T09:59:42.567 に答える
5

IEnumerable<T>読み取り専用インターフェースです。IList<T>代わりに、アイテムを追加および削除するためのメソッドを提供する を使用する必要があります。

于 2013-04-02T09:43:43.430 に答える
1

IEnumerable<T>は加算操作をサポートしていないため、に要素を追加することはできません。の実装を使用するか、可能であればにICollection<T>キャストするIEnumerable<T>必要があります。ICollection<T>

IEnumerable<System.Windows.Documents.FixedPage> page;
....
ICollection<System.Windows.Documents.FixedPage> pageCollection 
    = (ICollection<System.Windows.Documents.FixedPage>) page

キャストが不可能な場合は、たとえば

ICollection<System.Windows.Documents.FixedPage> pageCollection 
   = new List<System.Windows.Documents.FixedPage>(page);

次のように実行できます。

ICollection<System.Windows.Documents.FixedPage> pageCollection
    = (page as ICollection<System.Windows.Documents.FixedPage>) ??
      new List<System.Windows.Documents.FixedPage>(page);

後者は、変更可能なコレクションがあることをほぼ保証します。ただし、キャストを使用すると、コレクションを正常に取得できますが、すべての変更操作でNotSupportedException. これは、読み取り専用コレクションの場合です。そのような場合、コンストラクターを使用したアプローチが唯一のオプションです。

ICollection<T>インターフェイスは を実装しているため、現在使用している場所ならどこでもIEnumerable<T>使用できます。pageCollectionpage

于 2013-04-02T09:46:36.467 に答える
1

試す

IEnumerable<System.Windows.Documents.FixedPage> page = new List<System.Windows.Documents.FixedPage>(your items list here)

また

IList<System.Windows.Documents.FixedPage> page = new List<System.Windows.Documents.FixedPage>(1);
page.Add(your item Here);
于 2013-04-02T09:47:44.593 に答える
1

IEnumerable不変です。アイテムを追加することも、アイテムを削除することもできません。
のクラスはSystem.Collections.Genericこのインターフェイスを返すため、コレクションに含まれるアイテムを反復処理できます。

MSDN から

Exposes the enumerator, which supports a simple iteration over a collection of a specified type.

MSDN リファレンスについては、こちらを参照してください。

于 2013-04-02T09:44:12.607 に答える