分配给只读属性

本文关键字:只读属性 分配 | 更新日期: 2023-09-27 18:15:20

你好,我想序列化一个对象,但是,如果尝试取消IEnumerable<>我收到这个错误

错误75无法将属性或索引器"Nodes"分配给它--它是只读

我的示例代码:

序列化部件。

FileStream fs = new FileStream(sv.FileName, FileMode.Create, FileAccess.ReadWrite);
BinaryFormatter bin = new BinaryFormatter();
bin.Serialize(fs, graphControl.Nodes);
fs.Close();

反序列化部分:

FileStream fs = new FileStream(op.FileName, FileMode.Open, FileAccess.ReadWrite);
BinaryFormatter bin = new BinaryFormatter();
//Error Here
graphControl.Nodes = (IEnumerable<Node>)bin.Deserialize(fs);

节点类部件:

public List<Node> graphNodes = new List<Node>();
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public IEnumerable<Node> Nodes { get { return graphNodes; } }

有人能帮我吗?

分配给只读属性

graphNodes不应该是公共的,但既然是,就使用它:

graphControl.graphNodes = (IEnumerable<Node>)bin.Deserialize(fs);

但它真的不应该公开,所以这更好:

graphControl.Nodes.Clear();
graphControl.Nodes.AddRange( (IEnumerable<Node>)bin.Deserialize(fs) );

并将CCD_ 1设为私有。

由于您有IEnumerable<Node>,您可能需要一次只做一项:

graphControl.Nodes.Clear();
var nodes = (IEnumerable<Node>)bin.Deserialize(fs);
foreach(var node in nodes) {
    graphControl.Nodes.Add(node);
}