C# 遍历数组

C# 遍历数组,c#,arrays,loops,C#,Arrays,Loops,迭代一个数组不是问题,但是如果我只想在调用该方法时递增该怎么办 我甚至不确定这是否可行,但有没有更简单的方法 int counter; string[] myArray = {"foo", "bar", "something", "else", "here"}; private string GetNext() { string myValue = string.Empty; if (counter < myArray.L

迭代一个数组不是问题,但是如果我只想在调用该方法时递增该怎么办

我甚至不确定这是否可行,但有没有更简单的方法

    int counter;
    string[] myArray = {"foo", "bar", "something", "else", "here"};

    private string GetNext()
    {
        string myValue = string.Empty;

        if (counter < myArray.Length) {
            myValue = myArray [counter];
        } else {
            counter = 0;
        }

        counter++;

        return myValue;
    }
int计数器;
字符串[]myArray={“foo”、“bar”、“something”、“else”、“here”};
私有字符串GetNext()
{
string myValue=string.Empty;
if(计数器
如果我理解您想要做什么,我相信您需要做的就是调用数组上的GetEnumerator()方法。枚举器对象有一个MoveNext()方法,该方法移动到列表中的下一项,如果有效,则返回
true
,如果无效,则返回
false
。使用
Current
属性读取枚举数的值,可以使用
reset
将计数器重置为0。您需要的是迭代器

private IEnumerable<String> myEnumarable()
{
    foreach(string i in myArray)
    {
       yield return i;
    }
}
private IEnumerable myenumerable()
{
foreach(myArray中的字符串i)
{
收益率i;
}
}
但是,只需调用myArray.GetEnumerator();也有同样的效果

你用它

string[] myArray = { "foo", "bar", "something", "else", "here" };
IEnumerator<String> myEnum;

private string GetNext() //Assumes there will be allways at least 1 element in myArray.
{
    if(myEnum == null)
       myEnum = myArray.GetEnnumerator();
    if(!myEnum.MoveNext())
    {
       myEnum.Reset();
       myEnum.MoveNext();
    }
    return myEnum.Current;
}
string[]myArray={“foo”,“bar”,“something”,“else”,“here”};
髓鞘炎;
私有字符串GetNext()//假定myArray中始终至少有1个元素。
{
if(myEnum==null)
myEnum=myArray.GetEnumerator();
如果(!myEnum.MoveNext())
{
myEnum.Reset();
myEnum.MoveNext();
}
返回myEnum.Current;
}

您可以尝试以下方法:

private string GetNext()
{
    string result = myArray[counter];
    counter = (counter + 1) % myArray.Length;
    return result;
}
您的代码有一个bug,其中“foo”只在第一次返回

foo bar something else here <-- oops! bar something else here 福 酒吧 某物 其他的 在这里
您发布的示例基本上是一个枚举器的实现,所以是的,它可以工作

string[] _array = {"foo", "bar", "something", "else", "here"};

IEnumerable<String> GetEnumarable()
{
    foreach(string i in _array)
       yield return i;
}
参考资料
-
intx=0;

虽然(xI)不确定我是否完全理解这个问题。“我只想在调用该方法时递增?”我真的不知道你在问什么-除了初始化语句,除非有人调用你的Method,否则不会调用这些语句。除非你担心有人会在调用GetNext函数之间修改计数器或数组内容。。。
public class EnumeratorExample : IEnumerator
{
    string[] _array;

    // enumerators are positioned before the first element
    // until the first MoveNext() call.
    int position = -1;

    public EnumeratorExample(string[] array)
    {
        _array = list;
    }

    public bool MoveNext()
    {
        ++position;
        return (position < _array.Length);
    }

    public void Reset()
    {
        position = -1;
    }

    object IEnumerator.Current
    {
        get { return Current; }
    }

    public string Current
    {
        get
        {
            try
            {
                return _array[position];
            }
            catch (IndexOutOfRangeException)
            {
                throw new InvalidOperationException("Enumerator index was out of range. Position: " + position + " is greater than " + _array.Length);
            }
        }
    }
}
int x=0;
while ( x<myArray.length){
    if(condition){
        x++;
        system.out.print(myArray[x]);
     }
}