web-dev-qa-db-ja.com

動的変数名を作成する

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#で変数名を変更しますか?任意のコントロールIDまたは名前を連結できるように、c#(で変数名を連結します)...

動的変数名(シナリオ)が必要な理由:

var variablename=""
var variablename0=No;
var variablename1=Yes;
var variablename2=No;

。 。 。

複数の行を持つgridviewがあります。そして、サーバー側の変数をすべての行に割り当てる必要があります。したがって、サーバー側で変数のセットが必要です。すべてのテンプレートフィールドにText=<%# variablename+rowCount%>を設定できるのは私だけです。

このrowCountは、すべてのグリッド行インデックスを意味します。

グリッドに2行ある場合、rowCount値は0,1,2です

ここで、個別の行のvariablenamevariablename0,variablename1,variablename2に動的に変更する必要があります。

36

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"];
        }
    }
}
43
neilcollins

いいえ、できません。代わりに配列を使用する必要があります。

name[i] = i;

この場合、name+iname[i]です。

11
gleng

変数名はコンパイル時に知っている必要があります。実行時にこれらの名前を動的に入力する場合は、List<T>を使用できます

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

ここで入力文字列は、おそらく任意のテキストまたは任意のリスト

3
Lucifer

これを試して、ユーザー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);
          }
      }
   }
2
Mo Ein

これは不可能です。コンパイル時にエラーが発生します。

このタイプの要件には配列を使用できます。

ご参考までに :

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

1
Sagar Rawal