簡體   English   中英

有沒有辦法將泛型參數類型限制為某個屬性的類型?

[英]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;

現在,您可以在UserIUserService使用UserIdType而不是String 當您想更改Id屬性的類型時,只需更改 using alias 指令,而不必更改Id或參數userId的類型。


但是,您是否仍然需要更改依賴於Id屬性的代碼? 與您必須進行的所有其他代碼更改相比,更改一件額外的事情並沒有那么麻煩。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM