[英]Is there a way to constrain a generic parameter type to the type of a certain property?
請考慮以下代碼:
public class User
{
public String Id {get; set;}
}
public interface IUserService
{
bool IsAdmin(string userId);
}
我不想在接口中指定userId
參數的類型,而是使用一個泛型類型,該類型被限制為與類User
的屬性Id
具有相同的類型,這樣我就不必更改代碼,如果我最終決定更改屬性的類型。 所以我想到的是:
public interface IUserService
{
bool IsAdmin<T>(T userId) where T : typeof(User.String)
}
那可能嗎?
不,那是不可能的。 將泛型限制為一種特定類型也不是很有用,這違背了擁有泛型的目的。
您可以做的是創建自己的類型UserId
(類或結構)並在兩個地方使用它。 所以,如果你對什么樣的用戶標識符是程序中的更改結構,你可以在一個地方改變它,它工作在你的計划。
也許您可以使用動態屬性?:
public dynamic Id { get; set; }
目前,這是不可能的,但作為一種解決方法,您可以使用using alias 指令,前提是兩個接口都在同一個文件中。
在兩個接口所在的文件中,添加一個 using alias 指令,如下所示:
using UserIdType = System.String;
現在,您可以在User
和IUserService
使用UserIdType
而不是String
。 當您想更改Id
屬性的類型時,只需更改 using alias 指令,而不必更改Id
或參數userId
的類型。
但是,您是否仍然需要更改依賴於Id
屬性的代碼? 與您必須進行的所有其他代碼更改相比,更改一件額外的事情並沒有那么麻煩。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.