【发布时间】:2013-03-07 15:29:03
【问题描述】:
我有一个ViewState 持有一个List<T>
public List<AwesomeInt> MyList
{
get { return ((List<int>)ViewState["MyIntList"]).Select(i => new AwesomeInt(i)).ToList(); }
set { ViewState["MyIntList"] = value.GetIntegers(); }
}
现在,假设我打电话给MyList.Add(new AwesomeInt(3)),列表不会保留更改。
我相信这是因为 get 中的 .ToList() 正在创建一个新的 List 对象,因此永远不会调用 set,因此永远不会保存在 ViewState 中。
我之前已经解决过这个问题
- 不通过保存/调用直接调用
.Select/.ToList()转化。 - 不使用
.Add或.Remove函数,而是使用 使用等号重新初始化List。
但是,如果类不可序列化并且我无法控制,则有时 1. 是不切实际的,而 2. 有点难看,因为我必须先将其复制到临时文件,然后添加,然后重新分配,或使用Concat 添加单个项目。
有更好的方法吗?
【问题讨论】:
-
您是否有理由不能直接使用列表(例如
return (List<int>)ViewState["MyIntList"];?我的意思是AwesomeInt到底是什么,您为什么不存储它?它不是可序列化的吗? -
在某些情况下我无法控制它并且无法使其可序列化