如何在C#中使用“for”循环创建动态递增变量

时间:2011-09-12 10:49:06

标签: c# dynamic

如何在C#中使用“for”循环创建动态递增变量?像这样: track_1, track_2, track_3, track_4.等等。

6 个答案:

答案 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);
    ...
}