创建动态变量名称

时间:2013-12-31 12:58:23

标签: c# asp.net asp.net-mvc c#-4.0

我们可以在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#中连接变量名(就像我们可以连接任何控件ID或名称)...

为什么我需要动态变量名称(方案):

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以获得单独的行。

5 个答案:

答案 0 :(得分:38)

C#是强类型的,因此您无法动态创建变量。您可以使用数组,但更好的C#方式是使用Dictionary,如下所示。更多关于C# dictionaries here

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 :(得分:11)

没有。这是不可能的。您应该使用数组:

name[i] = i;

在这种情况下,您的name+iname[i]

答案 2 :(得分:3)

变量名称应在编译时知道。如果您打算在运行时动态填充这些名称,可以使用List<T>

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

这里输入字符串可能是任何文本或任何列表

答案 3 :(得分:2)

尝试这个,用户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);
          }
      }
   }

答案 4 :(得分:1)

这是不可能的,它会给你一个编译时错误,

您可以将数组用于此类要求。

供参考:

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