【问题标题】:Can we have genric Properties?我们可以有通用属性吗?
【发布时间】:2011-04-12 02:03:41
【问题描述】:

我们可以有一个通用属性吗?我需要存储数据。所以我使用了通用属性。当我将数据添加到该属性时,我收到一个错误,“对象引用未设置为一个对象”。请给我一些建议。

普通类 { 私人名单 _student_rollnumber; 公共列表 _student_name; 公共列表 Student_RollNumber { 得到 { 返回 _student_rollnumber; } 设置 { _student_rollnumber = 值; } } 公共列表 Student_Name { 得到{返回_学生姓名; } 设置 { _student_name = 值; } } }

我在按钮点击中使用了类。

私人无效btn_save_Click(对象发送者,EventArgs e) { 尝试 { GeneralClass obj = new GeneralClass(); obj.Student_RollNumber.Add(int.Parse(txtbx_rollnum.Text)); obj.Student_Name.Add(txtbx_SName.Text); MessageBox.Show("数据已保存"); } 捕捉(例外前) { MessageBox.Show(ex.Message, "来自表单的消息"); } }

【问题讨论】:

    标签: c#-4.0


    【解决方案1】:

    这与泛型无关。

    您只是没有初始化您的成员变量,即_student_rollnumber_student_name,因此当您尝试为它们设置Add 值时,它们是null

    【讨论】:

      【解决方案2】:
      class GeneralClass
          {
              public GeneralClass
              {
                 _student_rollnumber = new List<int>();
                 _student_name = new List<string>();
              }
      
              private List<int> _student_rollnumber;
              public List<string> _student_name;
              public List<int> Student_RollNumber
              {
                  get { return _student_rollnumber; }
                  set { _student_rollnumber = value; }
              }
              public List<string> Student_Name
              {
                  get { return _student_name; }
                  set { _student_name = value; }
              }
          }
      

      【讨论】:

        【解决方案3】:

        您没有初始化列表,因此它们默认为null,这意味着当您尝试在您的点击处理程序方法中添加它们时,您会得到一个NullReferenceException

        class GeneralClass
        {
            // initialise to a new List<int>, otherwise it will default to null
            private List<int> _student_rollnumber = new List<int>();
        
            // initialise to a new List<string>, otherwise it will default to null
            private List<string> _student_name = new List<string>();
        
            public List<int> Student_RollNumber
            {
                get { return _student_rollnumber; }
                // chances are that you don't need the setter, uncomment it if you do
                //set { _student_rollnumber = value; }
            }
        
            public List<string> Student_Name
            {
                get { return _student_name; }
                // chances are that you don't need the setter, uncomment it if you do
                //set { _student_name = value; }
            }
        }
        

        【讨论】:

          【解决方案4】:

          您可以通过以下链接获得帮助。

          http://msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx

          【讨论】:

          • 伟大的人!这是了解通用属性的非常有用的链接。