[英]How to create dynamic incrementing variable using “for” loop in C#
如何在C#中使用“ for”循環創建動態增量變量? 像這樣: track_1, track_2, track_3, track_4.
以此類推。
您不能創建動態命名的變量。 您所能做的-創建一些集合或數組並對其進行操作。 我認為最適合您的類是通用List <> :
List<String> listWithDynamic = new List<String>();
for (int i = 1; i < limit; i +=1)
{
listWithDynamic.Add(string.Format("track_{0}", i));
...
}
假設您要使用字符串:
for (int i = 1; i < limit; i +=1)
{
string track = string.Format("track_{0}", i);
...
}
但是,當您已經擁有名為track_1, track_2, track_3, track_4
變量時track_1, track_2, track_3, track_4
您將需要一個數組或List:
var tracks = new TrackType[] { track_1, track_2, track_3, track_4 } ;
for (int i = 0; i < tracks.length; i++)
{
var track = tracks[i]; // tracks[0] == track_1
...
}
請按照以下步驟進行:
for (int i = 0; i < lenght; i ++)
{
any work do in loop
}
不,我們不能在循環中創建動態命名的變量。 但是,還有其他一些優雅的方法可以解決問題,而不是創建動態命名的變量。
一種可能是,在循環之前創建一個數組或列表,然后將值存儲在循環中的數組/列表項中。 您可以稍后在代碼中的任何位置訪問數組/列表。 如果知道要使用哪個變量(track_1,track_2,...),則只需從數組/列表(tracks [1],tracks [2],...)中訪問它即可。
List<String> tracks = new List<String>();
for (int i = 1; i < limit; i++)
{
Track track = new Track();
tracks.Add(track);
...
}
不知道我是否收到您的問題,但我會嘗試:
for(var i = 1; i < yourExclusiveUpperbound; i++)
{
var track = String.Format("$track_{0}", i);
// use track
}
或使用一些LINQ-Magic:
foreach(var track in Enumerate.Range(1, count)
.Select(i => String.Format("$track_{0}", i)))
{
// use track
}
明顯的解決方案
for (var i = 0; i < 10; i++)
{
var track = string.Format("track_{0}", i);
}
基於Linq的解決方案
foreach (var track in Enumerable.Range(0, 100).Select(x => string.Format("track_{0}", x)))
{
}
基於操作員的解決方案 這有點棘手,但仍然很有趣。
for (var i = new Frob(0, "track_{0}"); i < 100; i++)
{
Console.WriteLine(i.ValueDescription);
}
struct Frob
{
public int Value { get; private set; }
public string ValueDescription { get; private set; }
private string _format;
public Frob(int value, string format)
: this()
{
Value = value;
ValueDescription = string.Format(format, value);
_format = format;
}
public static Frob operator ++(Frob value)
{
return new Frob(value.Value + 1, value._format);
}
public static Frob operator --(Frob value)
{
return new Frob(value.Value - 1, value._format);
}
public static implicit operator int(Frob value)
{
return value.Value;
}
public static implicit operator string(Frob value)
{
return value.ValueDescription;
}
public override bool Equals(object obj)
{
if (obj is Frob)
{
return ((Frob)obj).Value == Value;
}
else if (obj is string)
{
return ((string)obj) == ValueDescription;
}
else if (obj is int)
{
return ((int)obj) == Value;
}
else
{
return base.Equals(obj);
}
}
public override int GetHashCode()
{
return Value;
}
public override string ToString()
{
return ValueDescription;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.