为什么我的第二个 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);
}
我不知道为什么 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);
}