簡體   English   中英

如何在C#中使用“ for”循環創建動態增量變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM