如何在C#中使用“for”循环创建动态递增变量?像这样:
track_1, track_2, track_3, track_4.
等等。
答案 0 :(得分:7)
您无法创建动态命名的变量。所有你能做的 - 创建一些集合或数组,并与它一起操作。 我认为最好的课程是通用List<>:
List<String> listWithDynamic = new List<String>();
for (int i = 1; i < limit; i +=1)
{
listWithDynamic.Add(string.Format("track_{0}", i));
...
}
答案 1 :(得分:1)
假设你想要字符串:
for (int i = 1; i < limit; i +=1)
{
string track = string.Format("track_{0}", i);
...
}
但是当你已经有一个名为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
...
}
答案 2 :(得分:0)
不知道我是否收到您的问题,但我会尝试:
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
}
答案 3 :(得分:0)
明显的解决方案
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;
}
}
答案 4 :(得分:0)
执行以下操作:
for (int i = 0; i < lenght; i ++)
{
any work do in loop
}
答案 5 :(得分:0)
不,我们无法在循环中创建动态命名的变量。但是,还有其他优雅的方法来解决问题,而不是创建动态命名的变量。
可以是,在循环之前创建数组或列表,并将值存储在循环中的数组/列表项中。您可以稍后在代码中的任何位置访问阵列/列表。如果你知道要使用哪个变量(track_1,track_2,...),你只需从数组/列表中访问它(track [1],track [2],...)。
List<String> tracks = new List<String>();
for (int i = 1; i < limit; i++)
{
Track track = new Track();
tracks.Add(track);
...
}