j'ai une méthode simple qui utilise un bloc itérateur pour revenir un IEnumerable<T>
:problème en utilisant des méthodes C# iterator avec la sécurité d'accès au code
IEnumerable<MyItem> GetItems()
{
foreach (var item in Items)
{
yield return item;
}
}
Ordinairement, cette méthode fonctionne très bien, mais si je demande un attribut [SecurityCritical]
à la assembly (ou à la classe qui contient la méthode ci-dessus), il lance un TypeLoadException
lors de la tentative d'appel de la méthode. Le type qui ne parvient pas à charger est la classe générée par le compilateur qui correspond à la méthode itérateur, et c'est sa méthode GetEnumerator
qui est à l'origine du problème, car elle est transparente pour la sécurité.
Pour comparaison, si je modifie la méthode ci-dessus afin qu'il remplit et renvoie un List<MyItem>
, tout fonctionne correctement.
Des suggestions?
Merci,
Tim.
Peut-être que '[SecurityCritical]' essaie de vous dire de ne pas utiliser 'var' et d'être plus spécifique au type? – BeemerGuy
@BeemerGuy Je ne sais pas comment cela changerait quoi que ce soit puisque 'var' est du sucre syntaxique et est simplement remplacé par le type approprié par le compilateur. –
Est-ce que c'est pour Silverlight? Ensuite, peu importe, vous n'avez pas la clé secrète pour signer. –