C# 通用列表属性设置/添加行为

标签 c# asp.net generics

我想在 ASP.NET 用户控件的 View 状态中存储一个通用列表,所以我有以下代码:

    protected List<MoodleCourse> MoodleCoursesCreated
    {
        get
        {
            if (ViewState["MoodleCoursesCreated"] == null)
            {
                return new List<MoodleCourse>();
            }
            else
            {
                return (List<MoodleCourse>)ViewState["MoodleCoursesCreated"];
            }
        }
        set
        {
            ViewState["MoodleCoursesCreated"] = value;
        }
    }

因此,为了向列表中添加一个项目,我调用了 MoodleCoursesCreated.Add(new MoodleCourse);

然而,看来我必须执行 MoodleCourseCreated = MoodleCourseCreated 来激活 setter ,以便列表实际存储在 View 状态中。我怀疑有更优雅的方法来实现这一点,有人有什么建议吗?干杯

最佳答案

调用 .Add() 永远不会触发 setter 。我想,你根本不需要二传手。相反,重写 Add() 方法或创建您自己的 AddMoodleCourse(MoodleCourse moodleCourse):

protected void AddMoodleCourse(MoodleCourse moodleCourse)
{
    var courses = ViewState["MoodleCoursesCreated"] as List<MoodleCourse>;
    if (courses == null)
    {
         courses = new List<MoodleCourse>();
         ViewState["MoodleCoursesCreated"] = courses;
    }
    courses.Add(moodleCourse);
}

现在调用 MoodleCoursesCreated.AddMoodleCourse(new MoodleCourse);

关于C# 通用列表属性设置/添加行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7824330/

相关文章:

c# - 如何刷新挂起的 FileSystemWatcher 事件?

c# - ViewBag RuntimeBinderException(MVC 4、ASPX)

Javascript pageLoad 未在母版页中执行

java - 采取什么方法使我的代码更通用 Java/Spring?

c# - 查询字符串到文本框

ASP.NET:如何从处理程序访问 session ?

asp.net - React Router 链接到应用程序中的非 React 页面

c# - 运算符 == 不能应用于 C# 中的泛型类型吗?

scala - 类型稳定参数多态性

C# 等价于 VB 字符串大于