Molto spesso capita di avere attributi di cui dobbiamo impostare una proprietà di tipo Type. A partire dalla versione 11, C# permette di creare attributi che accettano un parametro generico sostituendo la proprietà di tipo Type.
public class GenericAttribute<T> : Attribute { } public class MyClass { [MyGenericAttribute<string>()] public void Method() { //code } }
Quando usiamo questa funzionalità dobbiamo tenere presente che ci sono alcune limitazioni. La prima è che visto che gli attributi devono essere completi già a design time, non possiamo usare parametri generici ereditati dalla classe. Per fare un esempio, il seguente codice non è valido.
public class GenericType<T> { [GenericAttribute<T>()] // Errore public void Method() { //code } }
Un'altra limitazione è che alcuni tipi non sono direttamente supportati come dynamic, i tipi nullabili e le tuple. Questi possono essere sostituiti con tipi simili, come object per dynamic, string per string? (e lo stesso per tutti i tipi nullable), e ValueTuple<> per le tuple.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare il trigger SQL con le Azure Function
Creazione di plugin per Tailwind CSS: espandere le funzionalità del framework dinamicamente
Verificare la provenienza di un commit tramite le GitHub Actions
Le novità di Angular: i miglioramenti alla CLI
Generare file per il download da Blazor WebAssembly
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Creare gruppi di client per Event Grid MQTT
Ottimizzazione dei block template in Angular 17
Gestire undefined e partial nelle reactive forms di Angular
Utilizzare i primary constructor in C#
Sfruttare lo stream rendering per le pagine statiche di Blazor 8
Definire stili a livello di libreria in Angular