首页 > 解决方案 > 有没有办法将泛型参数类型限制为某个属性的类型?

问题描述

请考虑以下代码:

public class User 
{
  public String Id {get; set;}
}

public interface IUserService 
{
  bool IsAdmin(string userId);
}

我不想userId在接口中指定参数的类型,而是使用一个泛型类型,该类型被限制为与类中的属性相同的类型,Id这样User如果我最终决定就不必更改代码更改属性的类型。所以我想到的是:

public interface IUserService 
{
  bool IsAdmin<T>(T userId) where T : typeof(User.String)
}

那可能吗?

标签: c#genericsinterfacesolid-principles

解决方案


不,那是不可能的。将泛型限制为一种特定类型也不是很有用,这违背了拥有泛型的目的。

您可以做的是创建自己的类型UserId(类或结构)并在两个地方都使用它。因此,如果您的程序中用户标识符的结构发生了变化,您可以在一处更改它,并且它适用于您的整个程序。


推荐阅读