【问题标题】:Create dynamic variable name创建动态变量名
【发布时间】:2021-10-26 13:01:02
【问题描述】:

我们可以在 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=&lt;%# variablename+rowCount%&gt;

这个rowCount 表示每个网格行索引。

如果网格有 2 行,则 rowCount 的值为 0,1,2

现在我需要为单独的行动态地将 variablename 更改为 variablename0,variablename1,variablename2

【问题讨论】:

  • 如果你问一个特定c#版本的问题,你应该只添加它。如果您用一般的c# 提问,只需c# 标签就足够了。
  • @MichaC :) 我不需要数组。
  • 经过很长时间,现在我知道它可以在 angularjs 中实现。

标签: c#


【解决方案1】:

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 来自我。不使用Dictionary可以吗?
  • @RameshRajendran,我认为您需要更抽象地考虑这个问题。根据定义,变量是具有 valuekey - 因此对于无法在编译时声明的变量,Dictionary 是适当的数据结构。
  • @Michael 您对变量的定义帮助我理解了 C# 中没有动态变量并不是一个缺点,因为我们可以使用字典来代替。 :)
  • 我用了这个方法。对于 int、long、object 等单个变量是可以的……但是,将 List 集成为字典元素会导致速度非常慢。
【解决方案2】:

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

name[i] = i;

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

【讨论】:

    【解决方案3】:

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

     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);
                }
            }
         }
      

      【讨论】:

      • 这超级慢,甚至不谈论多线程在反序列化时都会引起一些冲突。
      【解决方案5】:

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

      你可以使用数组来满足这种需求。

      供您参考:

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

      【讨论】:

        猜你喜欢
        • 2011-10-27
        • 2021-12-31
        • 2014-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多