Создать динамическое имя переменной
Можно ли создать динамическую переменную в С#?
Я знаю, что мой код ниже порождает ошибку и очень плохое кодирование. Но этот код имеет небольшую логику, например создание динамической переменной
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;
Возможно ли это в С#? Создать динамическую переменную в С#? и изменить имя переменной в С#? и объединить имя переменной в С# (например, мы можем конкатенировать любой идентификатор или имя элемента управления)...
Почему мне нужно имя динамической переменной (сценарий):
var variablename=""
var variablename0=No;
var variablename1=Yes;
var variablename2=No;
.
,
.
У меня есть gridview
с несколькими строками. И мне нужно назначить переменную стороне сервера для каждой строки. Поэтому мне нужно множество переменных на стороне сервера. я могу установить только Text=<%# variablename+rowCount%>
для каждого поля шаблона.
Этот rowCount
означает каждый индекс строки сетки.
Если сетка имеет 2 строки, то rowCount
значения равны 0,1,2
Теперь мне нужно динамически менять variablename
на variablename0,variablename1,variablename2
для отдельной строки.
Ответы
Ответ 1
С# строго типизирован, поэтому вы не можете динамически создавать переменные. Вы можете использовать массив, но лучше использовать С# для использования Словаря следующим образом. Подробнее о С# словарях здесь.
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"];
}
}
}
Ответ 2
Нет. Это невозможно. Вместо этого вы должны использовать массив:
name[i] = i;
В этом случае ваш name+i
- name[i]
.
Ответ 3
Это невозможно, оно дает ошибку типа соответствия,
Вы используете массив для этого типа требований.
Для справки:
http://msdn.microsoft.com/en-us/library/aa288453%28v=vs.71%29.aspx
Ответ 4
попробуйте этот, пользователь json для сериализации и десериализации:
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);
}
}
}
Ответ 5
Переменные имена должны быть известны во время компиляции. Если вы планируете заполнять эти имена динамически во время выполнения, вы можете использовать List<T>
var variables = List<Variable>();
variables.Add(new Variable { Name = inputStr1 });
variables.Add(new Variable { Name = inputStr2 });
здесь входная строка может быть любым текстом или любым списком