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です
ここで、個別の行のvariablename
をvariablename0,variablename1,variablename2
に動的に変更する必要があります。
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"];
}
}
}
いいえ、できません。代わりに配列を使用する必要があります。
name[i] = i;
この場合、name+i
はname[i]
です。
変数名はコンパイル時に知っている必要があります。実行時にこれらの名前を動的に入力する場合は、List<T>
を使用できます
var variables = List<Variable>();
variables.Add(new Variable { Name = inputStr1 });
variables.Add(new Variable { Name = inputStr2 });
ここで入力文字列は、おそらく任意のテキストまたは任意のリスト
これを試して、ユーザー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);
}
}
}
これは不可能です。コンパイル時にエラーが発生します。
このタイプの要件には配列を使用できます。
ご参考までに :
http://msdn.Microsoft.com/en-us/library/aa288453%28v=vs.71%29.aspx