C# Comment convertir un objet avec IList à IList<object>?
J'ai un objet qui implémente IList
interface, j'ai envie de le jeter aux IList<object>
ou
List<object>
,
J'ai essayé
IList<object> a=(IList<object>)b;
List<object> a=(IList<object>)b;
IList<object> a=(List<object>)b;
List<object> a=(List<object>)b;
Ce ne sont pas de travail. S'il vous plaît aider, merci.
Pour clarifier:
b est un objet de passer en paramètre de l'extérieur. Il implémente l'interface IList. Par exemple,
public class a
{
string name;
List<a> names;
}
public void func(object item)
{
object dataLeaves = data.GetType().GetProperty("names").GetValue(dataInput, null);
if (dataLeaves != null && dataLeaves.GetType().GetInterfaces().Any(t =>t.IsGenericType && t.GetGenericTypeDefinition() == typeof(IList<>)))
{
List<object> a=(List<object>) dataLeaves; //Need to convert the dataLeaves to list or IList
}
}
Quelle est l'erreur?
Qu'est-ce que
de quel type b? comment est-il déclaré?
b est un objet de passer en paramètre de l'extérieur. Il implémente l'interface IList. Par exemple, b est une Liste<customType>, et de passer de l'objet à la fonction. Je veux convertir b pour une Liste<object>.
Qu'est-ce que
b
? ? ?b
semble être IList
, qui est nécessaire pour être converti à IList<object>
de quel type b? comment est-il déclaré?
b est un objet de passer en paramètre de l'extérieur. Il implémente l'interface IList. Par exemple, b est une Liste<customType>, et de passer de l'objet à la fonction. Je veux convertir b pour une Liste<object>.
OriginalL'auteur Lance H | 2013-02-07
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas convertir le existant objet d'une
IList<object>
si ce n'est pas implémenter cette interface, mais vous pouvez construire un nouveauList<object>
facilement à l'aide de LINQ:object
, ce et @Servy des reponses de travail, mais si vous utilisez un autre type, personnellement, je préfère leOfType<T>.ToList()
construire, puisque vous éviter de les jeter où laCast
opérateur défaillant.Je voudrais utiliser
Cast
pour exactement la même raison que dans la plupart des cas: si je m'attends à chaque élément d'une collection d'un type particulier, je veux la levée d'une exception si mes attentes étaient incorrectes. Si le monde n'est pas conforme à mes attentes, j'ai l'habitude de vouloir renflouer le plus tôt possible au lieu d'consiste à ignorer les valeurs que je n'attendais pas du tout. Il y a des moment où cette dernière approche est approprié - mais je les trouve de moins en moins fréquentes que de vouloir une exception.Juste point, je suppose que ça dépend de ce que vos attentes sont - quoi que, adage au sujet d'être prudent avec ce que vous envoyez, mais libéral avec ce que vous acceptez? 🙂
Que l'adage a été une douleur dans le cou, de mon point de vue. (Plus: une simple erreur.) C'est l'approche que les navigateurs ont pris en HTML - conduisant à toutes sortes de déchets dans des pages web. Comparez cela avec l'Api XML (et zut, compilateurs) qui ont tendance à être très strict avec ce qu'ils acceptent. Comment la rupture de nombreux fichiers XML voyez-vous par rapport brisé fichiers HTML?
Je me demande ce que la corrélation entre les adhérents et les partisans du "strict" vs "en vrac" en tapant? (mise en garde: l'utilisation de la vulgarité, les définitions de ces deux concepts - comme le python est "en vrac", C# est "strict")....Je suis sur le strict/stricte côté, moi-même, rend le débogage et les tests quand même quelque chose de plus simple.
OriginalL'auteur Jon Skeet
Trouvé la réponse:
OriginalL'auteur Lance H
Un
IList
simplement n'est pas unIList<object>
. Il est très improbable que l'objet fait implémente deux interfaces, de sorte que le cast de ne plus jamais réussir. Vous aurez besoin de créer une nouvelle liste d'objet qui implémenteIList<object>
:OriginalL'auteur Servy