#c# #controls #dynamic-usercontrols
#c#
Вопрос:
Можем ли мы создать динамическую переменную в C #?
Я знаю, что мой приведенный ниже код вызвал ошибку и очень плохое кодирование. Но этот код имеет небольшую логику, например, создать динамическую переменную
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;
Возможно ли это в c #? Создать динамическую переменную в c #? и изменить имя переменной в c #? и объедините имя переменной в c # (например, мы можем объединить любой идентификатор или имя элемента управления)…
Зачем мне нужно имя динамической переменной (сценарий):
var variablename=""
var variablename0=No;
var variablename1=Yes;
var variablename2=No;
.
.
.
У меня есть a gridview
с несколькими строками. И мне нужно назначить переменную на стороне сервера для каждой строки. Итак, мне нужен набор переменных на стороне сервера. единственное, что я могу установить Text=<%# variablename rowCount%>
для каждого поля шаблона.
Это rowCount
означает индекс каждой строки сетки.
Если сетка имеет 2 строки, то rowCount
значения равны 0,1,2
Теперь мне variablename
нужно variablename0,variablename1,variablename2
динамически изменить значение для отдельной строки.
Комментарии:
1. Если вы задаете вопрос с определенной
c#
версией, вы должны добавить только ее. Если вы задаете вопрос с помощью generalc#
, простоc#
tag будет достаточно.2. @MichaC 🙂 Мне не нужны массивы.
3. Спустя долгое время я понял, что это возможно в angularjs.
Ответ №1:
C # строго типизирован, поэтому вы не можете создавать переменные динамически. Вы могли бы использовать массив, но лучшим способом C # было бы использовать словарь следующим образом. Подробнее о словарях C # здесь .
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"];
}
}
}
Комментарии:
1. 1 от меня. Возможно ли это без использования
Dictionary
?2. @RameshRajendran, я думаю, вам нужно подумать об этой проблеме более абстрактно. Переменная по определению является ключом , имеющим значение — таким образом
Dictionary
, подходящей структурой данных является a для переменных, которые не могут быть объявлены во время компиляции.3. @Michael Ваше определение переменной помогло мне понять, что отсутствие динамических переменных в C # не является недостатком, потому что вместо этого мы можем использовать словарь. 🙂
4. Я использовал этот метод. Это нормально для отдельных переменных, таких как int, long, object и т. Д. … Однако интеграция List<something> в качестве элемента словаря вызывает огромную медлительность.
Ответ №2:
Нет. Это невозможно. Вместо этого следует использовать массив:
name[i] = i;
В этом случае ваш name i
name[i]
.
Ответ №3:
Имена переменных должны быть известны во время компиляции. Если вы собираетесь динамически заполнять эти имена во время выполнения, вы можете использовать List<T>
var variables = List<Variable>();
variables.Add(new Variable { Name = inputStr1 });
variables.Add(new Variable { Name = inputStr2 });
здесь строка ввода может быть любым текстом или любым списком
Ответ №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);
}
}
}
Комментарии:
1. Это очень медленно, даже не говоря о многопоточности, может вызвать некоторый конфликт при де / сериализации.
Ответ №5:
Это невозможно, это приведет к ошибке во время компиляции,
Для этого типа требований можно использовать массив .
Для справки :
http://msdn.microsoft.com/en-us/library/aa288453(v=vs.71).aspx