Создание имени динамической переменной

#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# версией, вы должны добавить только ее. Если вы задаете вопрос с помощью general c# , просто 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