c# - 有没有办法将泛型参数类型限制为某个属性的类型?
问题描述
请考虑以下代码:
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)
}
那可能吗?
解决方案
不,那是不可能的。将泛型限制为一种特定类型也不是很有用,这违背了拥有泛型的目的。
您可以做的是创建自己的类型UserId
(类或结构)并在两个地方都使用它。因此,如果您的程序中用户标识符的结构发生了变化,您可以在一处更改它,并且它适用于您的整个程序。
推荐阅读
- python - 如何通过 django 将文件列表上传到 URL?
- java - Selenium Java-如何登录一次并使用同一浏览器实例运行多个测试用例,而不是为每个测试打开/关闭浏览器
- c - 为什么频率阵列会保存垃圾值?
- php - PHP - 正确分组数据并获取数据之间的数据
- ios - FIRPhoneAuthProvider providerWithAuth 不工作 ios
- arrays - 基于第一列值聚合数据
- flutter - 如何在颤振中实现这种类型的自定义标签设计?
- r - 将非英语数据从 SQL Server 导入到 R
- mysql - MySQL - 如何按名称排序,然后按字母数字有选择地在表上?
- javascript - 正则表达式 - 或 _ 在字符串的开头或结尾