Comment ajouter différents types d'objets dans un seul tableau en C#?
J'ai l'intention de réécrire mon Python Tuile Moteur en C#. Il utilise une liste de tous les objets du jeu et le rend sur l'écran. Mon problème est que, contrairement à Python où vous pouvez ajouter presque n'importe quoi pour un tableau (e.g x = ["jj" , 1, 2.3, 'G', foo]
) vous ne pouvez ajouter qu'un seul type d'objets
en C# array (int[] x = {1,2,3};
) . Existe-il des tableaux dynamiques (similaire à la ArrayList()
classe) ou quelque chose qui permet de regrouper différents types dans un seul tableau? parce que tous les objets du jeu sont différentes classes.
- La création d'une nouvelle classe est votre solution la plus sage.
Vous devez vous connecter pour publier un commentaire.
Très simple—créer un tableau de classe d'Objet et affecter quoi que ce soit à la matrice.
vous pouvez utiliser un
object
tableau.strings
,int
,bool
, etclasses
sont tous considérés comme des objets, mais ne compte que chaque objet n'est pas de préserver ce qu'elle était autrefois, de sorte que vous besoin de savoir qu'un objet est en fait une chaîne, ou une certaine classe. Ensuite, vous pouvez juste lancer l'objet dans la classe/type de données.Exemple:
Cependant, le C# est un langage fortement typé, donc je vous conseille de vous embrasser la langue des différences. Peut-être que vous devriez regarder comment vous pouvez restructurer votre moteur utiliser le typage fort, ou envisager d'autres moyens de partager les différentes classes, etc. Personnellement, j'aime les cours C# de cela, me permet d'économiser beaucoup de temps d'avoir à se soucier des types de données, etc. parce que le C# va jeter tout de casting (changement d'un type de données à un autre) les erreurs que j'ai dans mon code avant l'exécution.
Aussi, recouvrent vous ne savez pas, xna est le C#'s jeu de cadre (n'a pas à avoir comme une balise, donc je suppose que vous ne l'utilisez pas).
Vous pouvez écrire une classe de base abstraite appelée GameObject, et de faire toutes les gameObject en Hériter.
Edit:
C# a une liste de tableaux qui vous permet de mélanger les genres au sein d'un tableau, ou vous pouvez utiliser un objet array, object[]:
En c# à l'utilisation d'un objet tableau[] pour stocker différents types de données dans chaque élément de l'emplacement.
Vous pouvez utiliser
object[]
(un tableau d'objets), mais il serait plus souple à utiliserList<object>
. Il répond à votre exigence que tout type d'objet peut être ajouté à cela, et comme un tableau, il peut être accessible par un index numérique.L'avantage de l'utilisation d'une Liste, on n'a pas besoin de savoir comment les éléments à tenir lorsque vous le créez. Il peut augmenter ou diminuer de façon dynamique. Aussi, il est plus riche API pour manipuler les éléments qu'il contient.
Voici comment vous pouvez le faire
Utilisation
List<object>
(comme tout ce qui est dérivé de l'objet en C#):Aussi
dynamic
pourraient travailler pour vous (et votre python à l'arrière-plan)Si vous wan pas à utiliser
dynamic
vous avez vraiment besoin de savoir ce que vous faites. Veuillez lire ce Article MSDN avant de commencer.Mais avez-vous besoin?
C# est fortement typé et très solide, un langage de programmation. Il est très flexible et idéal pour la création d'applications à l'aide de l'orienté objet et fonctionnelle des paradigmes. Ce que vous voulez faire peut être acceptable pour python, mais a l'air assez mauvais sur C#. Ma recommandation: utiliser la programmation orientée objet et essayer de construire le modèle de votre problème. Ne jamais mélanger des types comme vous avez essayé. Une liste est pour un seul type de données. Aimeriez-vous décrire votre problème en profondeur, de sorte que nous pouvons vous proposer une meilleure solution?
Vous devez déclarer votre tableau avec le type de données
object
:Vous pouvez utiliser un tableau d'objet de classe et tout ce qu'il possible d'ajouter différents types d'objet dans le tableau.