Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 泛型,其中<;t>;类库和MVC应用程序_C#_Asp.net Mvc 4_Generics - Fatal编程技术网

C# 泛型,其中<;t>;类库和MVC应用程序

C# 泛型,其中<;t>;类库和MVC应用程序,c#,asp.net-mvc-4,generics,C#,Asp.net Mvc 4,Generics,我正在尝试学习如何在泛型中使用where,我似乎可以使用它,但我不确定我是如何使用它的 目前我在类库中有: public class NewMembersViewModel { public NewMembersViewModel() { Id = Guid.NewGuid().ToString(); } [Display(Name = "Username")] [RemoteUse

我正在尝试学习如何在泛型中使用where,我似乎可以使用它,但我不确定我是如何使用它的

目前我在类库中有:

public class NewMembersViewModel
    {
        public NewMembersViewModel()
        {
            Id = Guid.NewGuid().ToString();
        }

        [Display(Name = "Username")]
        [RemoteUsernameValidation("IsUserNameTaken", "Register", ErrorMessage = "Username already taken")]
        public string MemberUsername        { get; set; }

        [Display(Name = "Password")]
        public string MemberPassword        { get; set; }

        [Display(Name = "Email")]
        [RemoteEmailValidation("IsEmailTaken", "Register", ErrorMessage = "Email already in use")]
        public string MemberEmail           { get; set; }

        [Display(Name = "Mobile Number")]
        [RemoteMobileValidation("IsMobileTaken", "Register", ErrorMessage = "Mobile Number already in use")]
        public string MemberMobile          { get; set; }

        [Display(Name = "Forename")]
        public string MemberForename        { get; set; }

        [Display(Name = "Surname")]
        public string MemberSurname         { get; set; }

        public string Id                    { get; set; }
        public int VerificationCode         { get; set; }
    }

公共静态类SqlDatabaseMethods,其中T:NewMembersViewModel
{
公共静态bool登录用户(T成员)
{
var p=member.MemberEmail;
返回true;
}
公共静态bool AddNewMember(T成员)
{
var name=member.MemberForename;
返回true;
}
}
然后在我的MVC应用程序中,我有:

bool name = SqlDatabaseMethods<NewMembersViewModel>.AddNewMember(model);

if (name)
{
    var test = "works";
}
bool name=SqlDatabaseMethods.AddNewMember(model);
如果(姓名)
{
var test=“works”;
}

这确实有效,有人能告诉我我是否做得正确吗?因为我所看到的所有示例都是控制台应用程序

当您需要一些跨多个类通用的功能时,泛型是有意义的。在本例中,
where
子句定义了泛型类型的约束。在这种情况下,通用方法有助于重用功能

在您的情况下,
SqlDatabaseMethods
似乎不能重复使用多次,因为model
NewMembersViewModel
似乎非常具体,在其他地方几乎不可重复使用

在代码中,您正确地使用了泛型,但在我看来,这里根本不需要泛型。您可以同样轻松地使用以下代码,而不需要泛型的开销:

public static class SqlDatabaseMethods
{
    public static bool LoginUser(NewMembersViewModel member)
    {
        var p = member.MemberEmail;
        return true;
    }

    public static bool AddNewMember(NewMembersViewModel member)
    {
        var name = member.MemberForename;
        return true;
    }
}
然后调用如下方法:

bool name = SqlDatabaseMethods.AddNewMember(model);
if (name)
{
    var test = "works";
}

您是否有从
NewMembersViewModel
派生的类?如果没有,则只有一个具体类型,您不需要泛型,因为永远不会有任何
t
不是
NewMembersViewModel
。您是否可以解释一下您使用
SqlDatabaseMethods
试图实现的目标?目前,静态方法只返回true。泛型在不同类型中使用相同的代码时最有用。Hi@StuartLC我正在学习如何使用这种类型的功能,因此,返回true只是一个测试。Hi我正在学习如何使用这种类型的功能,因为我以前从未使用过它@dotnetom的答案非常清楚,只有在跨多个类使用相同功能时,使用“where”才真正有用。但我在MVC应用程序中正确使用了它这一事实是主要的答案,因为这是我不确定的代码部分。
bool name = SqlDatabaseMethods.AddNewMember(model);
if (name)
{
    var test = "works";
}