Utilisation de .NET 3.5 et C # 3.0,
new JavaScriptSerializer().Deserialize<List<bool?>>("[true, false, null]");
6 Réponses :
Vous mélangez la liste générique iList code> code>. Liste ilist ilist code>. p>.
Je suppose que vous vouliez dire votre premier iList à être ilist (T) de MSDN.MicRosoft. com / fr-nous / bibliothèque / 6sh2ey19.aspx , liste de classes publics (T): ilist (t), icollection (t), iEnumerable (t), iList, icollection, iénumérable (supports angles modifiés entre parenthèses) Il hérite des deux, correctement.
Oui, c'est. Voir http: // social .msdn.microsoft.com / Forums / FR-US / NetFXBCl / Filetage / ABC99FB5-E218-4FA-8969-3D96F6021CEE / pour d'autres rapports. Fondamentalement, lorsque vous accédez à la liste
La réponse est "Oui, c'est en fait un bogue" pour une fois au lieu de "Non, tu es foucié ici ..." Savourant le moment ...: D
ha! C'est un drôle. Je crois que cela a à voir avec l'idée que la nullable bool est, strictement parlant, mise en œuvre comme une structure et ilist s'attend à un objet, et peut-être que cela s'attend à encadrer un bool ou quelque chose. Jon Skeet Où es-tu? Nous avons besoin de toi! (Taps Pantoufles Ruby 3 fois) P>
C'est "par conception" et explicitement. La raison pour laquelle est cette liste dans ce cas, la valeur par défaut d'un type de valeur (et nullable est un type de valeur) n'est pas null, il n'est pas autorisé. P> P> iList code>. Il filtre les valeurs transmises aux différentes méthodes pour effectuer un peu de vérification nulle. La logique est essentiellement la suivante
Par défaut (Bool?) == (bool?) NULL, cependant.
Lorsque vous appelez la méthode d'ajout sur le code> iList code> avec une valeur null, c'est une référence null que vous passez à la méthode, pas une valeur nullable. La référence NULL ne peut pas être convertie en une valeur nullable.
La méthode d'ajout attend quelque chose qui contient quelque chose qui contient un Si vous utilisez le générique Interface bool code> ou un bool? Code>. Comme vous ne pouvez pas encadrer une valeur NULL, vous ne pouvez pas créer d'objet possible pour ajouter une valeur null au IList code>. P> ilist
Malheureusement, dans ce cas, cela ne fonctionnera pas. Un exemple de ceci en action consiste à utiliser le nouvel JavasCriPTheSerializer (). Desérialisze
Comme il a été signalé, la mise en œuvre de l'implémentation de iList.add (élément d'objet) dans la liste Ma solution de contournement implique la réflexion en obtenant et invoquant une méthode ADD (T item) à partir d'objet de liste. P> IList list = new List<bool?>();
MethodInfo addMethod = list.GetType().GetMethod("Add");
addMethod.Invoke(list, new object[] { null });
FYI: Visual Studio 2010 Beta 2, Framework 4.0 (non client 4.0): (doit inclure la référence: Utilisation de System.Collections): IList Liste = nouvelle liste (); list.add (null); compile, et, à l'exécution: définir un point de rupture après exécution, ouvrant la fenêtre de commande et exécuter? liste [0] imprime 'null.
Fait intéressant, cela fonctionne à Mono.