问题描述
我正在学习使用有关 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>
之类的通用类型,下次:)