Créer un nom de variable dynamique

peut-on créer une variable dynamique dans C#?

je sais que mon code ci-dessous est une erreur et un très mauvais codage. Mais ce code a une petite logique comme créer une variable dynamique

var name=0;
for(i=0;i<10;i++)// 10 means grid length
{
    name+i=i;
}

var xx1=name1;
var xx2=name2;
var xx3=name3;

est-ce possible en c#? Créer une variable dynamique dans c#? et changer le nom de la variable dans c#? et concaténer le nom de la variable en c#( comme nous pouvons concaténer n'importe quel id ou nom de contrôle)...

pourquoi j'ai besoin du nom de la variable dynamique (scénario):

var variablename=""
var variablename0=No;
var variablename1=Yes;
var variablename2=No;

. . .

j'ai un gridview avec plusieurs lignes. Et j'ai besoin d'attribuer variable côté serveur à chaque ligne. J'ai donc besoin d'un ensemble de variables côté serveur. la seule que je puisse régler Text=<%# variablename+rowCount%> pour chaque champ de modèle.

rowCount signifie chaque ligne de grille.

si la grille A 2 lignes, alors rowCount les valeurs sont de 0,1,2

maintenant je dois changer le variablenamevariablename0,variablename1,variablename2 dynamiquement pour une ligne séparée.

25
demandé sur Ramesh Rajendran 2013-12-31 16:58:22

5 réponses

C# est fortement tapé de sorte que vous ne pouvez pas créer des variables dynamiquement. Vous pouvez utiliser un tableau, mais une meilleure C# serait d'utiliser un Dictionnaire comme suit. Plus sur C# dictionnaires ici.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace QuickTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Dictionary<string, int> names = new Dictionary<string,int>();


            for (int i = 0; i < 10; i++)
            {
                names.Add(String.Format("name{0}", i.ToString()), i);
            }

            var xx1 = names["name1"];
            var xx2 = names["name2"];
            var xx3 = names["name3"];
        }
    }
}
31
répondu neilcollins 2013-12-31 13:20:01

Non. Ce n'est pas possible. Vous devriez utiliser un tableau à la place:

name[i] = i;

Dans ce cas, votre name+iname[i].

11
répondu gleng 2013-12-31 12:59:42

essayez celui-ci, l'utilisateur json pour sérialiser et désérialiser:

 using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Web.Script.Serialization;

    namespace ConsoleApplication1
    {
       public class Program
       {
          static void Main(string[] args)
          {
              object newobj = new object();

              for (int i = 0; i < 10; i++)
              {
                List<int> temp = new List<int>();

                temp.Add(i);
                temp.Add(i + 1);

                 newobj = newobj.AddNewField("item_" + i.ToString(), temp.ToArray());
              }

         }

     }

      public static class DynamicExtention
      {
          public static object AddNewField(this object obj, string key, object value)
          {
              JavaScriptSerializer js = new JavaScriptSerializer();

              string data = js.Serialize(obj);

              string newPrametr = "\"" + key + "\":" + js.Serialize(value);

              if (data.Length == 2)
             {
                 data = data.Insert(1, newPrametr);
              }
            else
              {
                  data = data.Insert(data.Length-1, ","+newPrametr);
              }

              return js.DeserializeObject(data);
          }
      }
   }
2
répondu Mo Ein 2017-10-04 11:09:17

les noms des variables doivent être connus au moment de la compilation. Si vous avez l'intention de peupler ces noms dynamiquement à l'exécution, vous pouvez utiliser un List<T>

 var variables = List<Variable>();
 variables.Add(new Variable { Name = inputStr1 });
 variables.Add(new Variable { Name = inputStr2 });

ici chaîne de caractères peut-être n'importe quel texte ou n'importe quelle liste

1
répondu Lucifer 2016-12-20 10:57:50

Ce n'est pas possible, il vous donnera une erreur de compilation,

Vous pouvez utiliser le tableau pour ce type d'exigence .

Pour votre Référence :

http://msdn.microsoft.com/en-us/library/aa288453%28v=vs.71%29.aspx

1
répondu Sagar Rawal 2018-05-15 06:36:28