convertir Liste & lt; Liste & lt; objet & gt; & gt; IList & lt; IList & lt; object & gt; & gt;
J'ai écrit une méthode qui est
public List<List<object>> Fetch(string data)
à l'intérieur j'ai créer
List<List<object>> p = new List<List<object>>();
mon patron veut maintenant retourner un IList<IList<object>>
au lieu de List<List<object>>
ie
public IList<IList<object>> Fetch(string data)
alors quand j'ai essayer de faire
return (IList<IList<object>>) p; //throws an exception
Comment puis-je convertir des
List<List<object>>
à IList<IList<object>>
et retour à List<List<object>>
Grâce.
source d'informationauteur david
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas effectuer cette conversion via straight casting - il ne serait pas sûr. Au lieu de cela, vous devez utiliser:
Ensuite, pour chaque "sous-liste", vous pouvez utiliser:
Enfin, il suffit de retourner
ret
.Vous pourrait utiliser LINQ pour effectuer la conversion de vos
List<List<object>>
lorsque vous revenez il - mais il serait mieux de créer un type approprié pour commencer avec, comme indiqué ci-dessus.À comprendre pourquoi certaines de ces réponses sont fausses, supposons que vous pourrait ce faire:
Alors ce serait valide:
Mais
p[0]
est une référence à unobject[]
pas unList<object>
... notre soi-disant type-code de sécurité n'est pas sûr du tout...Heureusement,
IList<T>
est invariante pour éviter ce problème.Vous ne devriez pas avoir besoin de convertir back - vous pouvez faire à peu près n'importe quoi sur
IList
que vous pourriez surList
.Vous devez déclarer votre liste
Cela fonctionne, parce que seule la liste externe est créé dans la première place. Vous pouvez ensuite insérer des éléments individuels qui sont compatibles avec
IList<object>
:Vous avez besoin de modifier la déclaration de la variable résultat de
List<List<object>
àIList<IList<object>>
Qui vous pouvez instancier contre
List<IList<object>>
Et chaque élément dans le résultat peut être de type
List<object>
List<T>
etIList<T>
ne prennent pas en charge la covariance. Si cela ne compile pas: