微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MVC 模型中关于使用 List(T) 的错误

如何解决MVC 模型中关于使用 List(T) 的错误

我正在学习使用有关 MVC 的在线教程之一构建应用程序。它需要创建一个用户数据库

我在构建应用程序时收到以下错误。我刚刚复制粘贴了教程中的代码。我用谷歌搜索了一些东西,但我没有得到它。请帮忙解决和解释。

using System;
using System.Collections.Generic;
using System.Collections;
using System.EnterpriseServices;

namespace AdvancedMVCApplication.Models
{

    public class Users
    {
        public List UserList = new List();

        //action to get user details 
        public usermodels GetUser(int id)
        {
            usermodels usrMdl = null;

            foreach (usermodels um in UserList)

                if (um.Id == id)
                    usrMdl = um;
            return usrMdl;
        }

        //action to create new user 
        public void createuser(usermodels usermodel)
        {
            UserList.Add(usermodel);
        }

        //action to udpate existing user 
        public void UpdateUser(usermodels usermodel)
        {

            foreach (usermodels usrlst in UserList)
            {

                if (usrlst.Id == usermodel.Id)
                {
                    usrlst.Address = usermodel.Address;
                    usrlst.dob = usermodel.dob;
                    usrlst.Email = usermodel.Email;
                    usrlst.FirstName = usermodel.FirstName;
                    usrlst.LastName = usermodel.LastName;
                    usrlst.Salary = usermodel.Salary;
                    break;
                }
            }
        }

        //action to delete exising user 
        public void DeleteUser(usermodels usermodel)
        {

            foreach (usermodels usrlst in UserList)
            {

                if (usrlst.Id == usermodel.Id)
                {
                    UserList.Remove(usrlst);
                    break;
                }
            }
        }
    }
}

错误 CS0305:使用泛型类型“列表”需要 1 个类型参数\Models\Users.cs Line:11

您可以在此处查看示例:https://www.tutorialspoint.com/mvc_framework/mvc_framework_advanced_example.htm

解决方法

我想说“也许tutorialspoint上的代码块在列表之后隐藏了必要的<xxx>,因为它被解释为HTML标签”..但后来我看到下一个代码块中有实际的html标签刚刚好

为了扩展 Klaus 提出的观点,可以在 C# 中编写由编译器而不是您完成的类。您为类处理的对象类型指定一些占位符,然后编译器可以使用它在后台为您创建一个实际的类

class TenThings<T>{

  private T[] _things = new T[10];

  private T GetFirst(){
    return _things[0];
  }
}

T 不是您的程序或框架中的任何类型,就本课程而言/如此处所写,但如果您在其他地方说:

var tt = new TenThings<string>();

然后编译器可以知道“任何提到 T 的地方,在这种情况下它需要是一个字符串”,因此它可以为您组合一个类,该类是一个包含十个字符串的数组,并具有一个返回字符串的 GetFirst 方法。在下一行,您可以使用 TenThings<int> 并且您将获得另一种处理整数的不同类型的类。您为编译器创建了一个模板,用于为您编写代码,您获得的好处是您的 GetFirst 确实在一种情况下返回一个字符串,而在另一种情况下返回一个 int。你可以像这样创建一个类:

class TenThings{

  private object[] _things = new object[10];

  private object GetFirst(){
    return _things[0];
  }
}

但是你必须转换所有的东西 - 像 ArrayList 这样的旧类就是这样工作的,这不是一个很好的体验

List 是一个通用类,就像这种新的“模板”方式;您确实需要在其名称后的尖括号中使用另一种类型的类,例如 List<UserModel> 并且它成为该类型的一部分,同时指示编译器如何创建模板。根据评论,似乎教程点忘记将相关的 <UserModels> 放在 List

之后

在该教程中,我不同意其他一些事情,但专门讨论此属性;创建 List 作为一个公共字段,当它似乎代表单个项目时调用类 UserModels(通常建议无根据的复数/项目集合具有以“Collection”结尾的名称 - 复数用于属性集合),即它应该是 public List<UserModel> UserModels { get; set; } = new List<UserModel>();。我将继续选择它,因为它不是一个只读集合,类型为 IEnumerable<T> 之类的通用类型,下次:)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。