Peut-on créer une variable dynamique en C #?
Je sais que mon code ci-dessous est une erreur jetée 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 en c #? et changer le nom de la variable en c #? et concaténer le nom de la variable en c # ( comme on peut concaténer n'importe quel ID ou nom de contrôle ) ...
Pourquoi ai-je 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'affecter une variable côté serveur à chaque ligne. J'ai donc besoin d'un ensemble de variables côté serveur. le seul que je peux définir Text=<%# variablename+rowCount%>
pour chaque champ de modèle.
Ceci rowCount
signifie chaque index de ligne de grille.
Si la grille a 2 lignes, alors les valeurs de rowCount
sont 0,1,2
Maintenant, je dois changer le variablename
en variablename0,variablename1,variablename2
dynamiquement pour une ligne séparée.
C # est fortement typé, vous ne pouvez donc pas créer de variables de manière dynamique. Vous pouvez utiliser un tableau, mais une meilleure méthode en C # consisterait à utiliser un dictionnaire comme suit. Plus sur Dictionnaires C # 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"];
}
}
}
Non, ce n'est pas possible. Vous devriez utiliser un tableau à la place:
name[i] = i;
Dans ce cas, votre name+i
est name[i]
.
Les noms de variables doivent être connus au moment de la compilation. Si vous avez l’intention de renseigner ces noms de manière dynamique à 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 d'entrée peut-être n'importe quel texte ou n'importe quelle liste
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);
}
}
}
Ce n'est pas possible, cela vous donnera une erreur de compilation,
Vous pouvez utiliser un tableau pour ce type d'exigence.
Pour votre référence:
http://msdn.Microsoft.com/en-us/library/aa288453%28v=vs.71%29.aspx