为什么我的第二个 foreach 不输出任何东西?

Why my second foreach dont output anything?

我不知道为什么 Main 中的第二个 foreach 没有按预期工作。我想序列化一个列表然后将其转换为数组,对其进行排序,再次转换为列表然后序列化它,但是我的反序列化有点不起作用,我不知道为什么。

我的 class 图书馆:

[Serializable]
public class Kolekcja<T> : ISerializable, IEnumerable<T> where T : IComparable<T>
{
    private List<T> lista = new List<T>();
    [NonSerialized]
    private int liczba1, liczba2;
    [NonSerialized]
    private int suma, roznica, iloczyn;

    public void Add(T item)
    {
        lista.Add(item);
    }

    public void Remove(T item)
    {
        lista.Remove(item);
    }

    public void RemoveAt(int item)
    {
        lista.RemoveAt(item);
    }
    public IEnumerator<T> GetEnumerator()
    {
        return lista.GetEnumerator();

    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return lista.GetEnumerator();
    }

    void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
    {
        List<T> lista2;
        T[] tablica;
        //wariant1
        tablica = lista.ToArray();
        Array.Sort<T>(tablica);
        info.AddValue("tablica", tablica, typeof(T[]));
    }

    public Kolekcja(SerializationInfo sinfo, StreamingContext ctx)
    {
        T[] tablica = (T[])sinfo.GetValue("tablica", typeof(T[]));
        lista = new List<T>(lista);
    }

    public Kolekcja()
    {

    }

    public Kolekcja(List<T> lista)
    {

    }

    public int Count => lista.Count;
    //public int Count { get {return lista.Count;}}
    public T Max => lista.Max();
    public T Min => lista.Min();

    public T this[int i]
    {
        get { return lista[i]; }
        set { lista[i] = value; }
    }

    public static bool operator <(Kolekcja<T> a, Kolekcja<T> b)
    {
        return a.Max.CompareTo(b.Min) < 0;
    }

    public static bool operator >(Kolekcja<T> a, Kolekcja<T> b)
    {
        return a.Min.CompareTo(b.Max) > 0;
    }
} 

我的主要:

class Program
{
    static void Main(string[] args)
    {
        Kolekcja <int> numbers = new Kolekcja<int>();
        numbers.Add(1);
        numbers.Add(3);
        numbers.Add(2);
        
        foreach(var el in numbers)
        {
            Console.WriteLine(el);
        }
        Stream fs = new FileStream("data.dat", FileMode.Create);
        BinaryFormatter bf = new BinaryFormatter();

        bf.Serialize(fs, numbers);

        fs.Close();

        fs = new FileStream("data.dat", FileMode.Open);
        bf = new BinaryFormatter();

        numbers = (Kolekcja<int>) bf.Deserialize(fs);

        foreach (var el in numbers)
        {
            Console.WriteLine(el);
        }

        fs.Close();
    }
}  

我真的不知道是我遗漏了什么还是反序列化有误,我尝试了 google 但没有任何帮助,而且我似乎还不了解序列化。

您的代码存在以下错误:

public Kolekcja(SerializationInfo sinfo, StreamingContext ctx)
{
    T[] tablica = (T[])sinfo.GetValue("tablica", typeof(T[]));
    lista = new List<T>(lista); //bug
}

修复如下:

public Kolekcja(SerializationInfo sinfo, StreamingContext ctx)
{
    T[] tablica = (T[])sinfo.GetValue("tablica", typeof(T[]));
    lista = new List<T>(tablica);
}