Chaîne de caractères comme nom de variable
est-il possible en C# pour utiliser une Chaîne comme un nom de variable ?
J'ai un:
String x = "matrix1_2";
Microsoft.VisualBasic.PowerPacks.RectangleShape y = ???;
??? - il devrait y avoir le nom de la variable...matrix1_2
Je pense que vous confondez le nom et la valeur d'une variable. Ou je suis confus.
C'est possible à l'aide de la réflexion, mais ce n'est pas une bonne idée, en général. Que voulez-vous atteindre? Il y a probablement une meilleure façon.
possible dupe stackoverflow.com/questions/4629/c-sharp-eval-equivalent
Pouvez-vous expliquer ce que vous en avez besoin pour?
C'est possible à l'aide de la réflexion, mais ce n'est pas une bonne idée, en général. Que voulez-vous atteindre? Il y a probablement une meilleure façon.
possible dupe stackoverflow.com/questions/4629/c-sharp-eval-equivalent
Pouvez-vous expliquer ce que vous en avez besoin pour?
OriginalL'auteur hradecek | 2012-02-07
Vous devez vous connecter pour publier un commentaire.
Non, vous ne pouvez pas, et il n'a pas de sens honnêtement d'avoir une fonction comme ça.
Si vous avez besoin d'attribuer dynamiquement des données avec une clé et une valeur, vous pouvez utiliser un dictionnaire:
Alors vous pouvez simplement lire la "variable" comme
Pas de problème ... :=)
Si vous sentez que votre question a été posée, vous pouvez "accepter" en cliquant sur la case à la gauche de la réponse.
OriginalL'auteur Denis Biondic
Non, il ne l'est pas. Si "matrix1_2" est une variable locale, alors vous ne pouvez pas le faire tant que la variable peut même pas existent après le compilateur est, si il est en fait un champ d'instance, puis la réflexion peut aider:
OriginalL'auteur Marc Gravell
Ce n'est pas possible.
Vous ne pouvez pas avoir de dynamique des noms de variables en C#, VB.NET ou tout .NET de la langue. Il n'y a pas de support pour une telle fonctionnalité.
Roslyn est une toute autre affaire. Il est pas en C#.
ce n'est certainement pas la meilleure façon de le faire, je ne pense pas mais si il sait ce que l'assemblée de la variable réside dans ce qu'elle devrait être en mesure d'utiliser la réflexion, à droite?
Je ne pense pas qu'il voulait déclarer la variable lors de l'exécution, mais seulement l'accès par nom lors de l'exécution. Je suis peut-être pas compris la question...
Il a probablement besoin d'une collection, mais ne sait pas comment l'exprimer.
OriginalL'auteur Oded
Semble être une mauvaise idée. Essayez-le avec les énumérations ou propres types de données /classes
OriginalL'auteur chrs
Avec la réflexion, mais je soupçonne que dans ce cas, theere est un meilleur design vous pourriez mettre en œuvre ce serait mieux que l'aide de la réflexion. Si vous fournir un peu plus d'info probablement l'un de nous pourrait vous aider avec ça.
Déclarer un dictionnaire variable:
Alors, où vous normallay écrire "matrix1_2 = somevalue;", au lieu d'écrire:
Alors vous serez en mesure de travailler avec le nom de la variable:
La réflexion ne doit pas permettre l'accès à des variables à l'intérieur d'une méthode: seules les méthodes, les champs, les types et les propriétés.
Ce n'est certainement compliquer la chose, mais qui pourrait sans doute être contourné... certainement pas la peine de travail autour de même si, comme je suis sûr qu'il ya de meilleures options pour son problème.
OriginalL'auteur Brandon Moore
Ne "matrix1_2" existent déjà? En d'autres mots, lorsque vous dites que y = ??? êtes-vous essayer d'accéder à une variable existante ou en créer un.
À ma connaissance, il n'y a aucun moyen de créer un nouveau "nommé" exemple au moment de l'exécution. Cependant, vous pouvez récupérer les noms des champs existants et de les sélectionner à l'aide du Système.De la réflexion.
MyType
ci-dessus est le nom de quelle que soit la classematrix1_2
vie.Je ne crois pas que les noms de variables sont conservés à l'intérieur d'une méthode. Une fois que vous compilez en bas à CIL bytecode ils sont référencés par la position (par exemple. V_0, V_1, V_2, etc) et quel que soit le nom que vous avez donné est perdu. Donc, même si vous étiez en mesure de créer dynamiquement une nouvelle variable locale, il faudra un certain profonde de la magie pour y faire référence dans votre C# programmes. Vous pourriez être en mesure d'utiliser AOP (avec peut-être PostSharp
C'est précisément mon point de vue. Il veut accéder à une théorie arbitraire variable. Si c'est un champ, ce code fonctionne, si c'est un bien, autre code de travail, si c'est un paramètre, d'autres du code du travail. Vous n'avez pas une très généralisée de la solution.
OriginalL'auteur Justin
Vous pouvez obtenir une valeur de champ d'un type dynamique de cette manière (à l'aide de C# dans un projet Silverlight 5).
*Où "point" est un type dynamique générée lors de l'exécution (mais qui n'ont pas à l'être) et "fieldName" est une chaîne de caractères pour le nom de la propriété que vous recherchez.
OriginalL'auteur elliott.io