我有一个foreach块,我想为跟踪调试目的绘制foreach内部步骤的索引.作为一个C#新手我做如下:
int i = 1;
foreach (x in y)
{
... do something ...
WriteDebug("Step: "+i.ToString());
i++;
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有任何方法可以获得当前步骤索引的值而无需为此目的明确创建变量.
编辑:为了澄清,我显然熟悉for循环的选项,但它不是我正在经历的数组,而是一个无序的集合.编号的原因仅仅是为了显示调试级别的进度,而不是其他任何内容.
使用C#和Silverlight
如何获取列表中当前项的索引?
码:
IEnumerable list = DataGridDetail.ItemsSource as IEnumerable;
List<string> lstFile = new List<string>();
foreach (var row in list)
{
bool IsChecked = (bool)((CheckBox)DataGridDetail.Columns[0].GetCellContent(row)).IsChecked;
if (IsChecked)
{
// Here I want to get the index or current row from the list
}
}
Run Code Online (Sandbox Code Playgroud)
如何实现这一目标
假设我有以下代码:
List<SomeObject> someObjects = ReturnListWithThousandsOfObjects();
foreach(SomeObject someobject in someObjects)
{
DoSomething.With(someObject);
}
Run Code Online (Sandbox Code Playgroud)
并且还假设在运行一分钟之后我放了一个断点DoSomething.With(someObject);.
调试器对我来说很好.但是现在我想知道我在列表的迭代中的位置(假设列表是无序的/没有键).
有没有办法让调试器说" foreach已经运行了2321次迭代的532次"?
如何在保持键的索引的同时迭代Dictionary的键.我所做的是将foreach-loop与一个局部变量合并,该局部变量i在每一轮循环中递增一.
这是我的代码:
public IterateOverMyDict()
{
int i=-1;
foreach (string key in myDict.Keys)
{
i++;
Console.Write(i.ToString() + " : " + key);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,使用局部变量似乎真的很低技术i.我想知道是否有一种方法我不必使用"额外"变量?不是说这是一种糟糕的方式,但有更好的方法吗?
可能重复:
Foreach循环,确定哪个是循环的最后一次迭代
foreach (DataRowView row in orderedTable.DefaultView)
{
if(lasttime) do-something;
}
Run Code Online (Sandbox Code Playgroud)
orderedtable是一个数据表
有谁知道如何找出我们是否在最后的foreach迭代?请记住,我确实在ordertable中有重复
我有这个代码:
foreach (Object element in elements.under)
{
...
}
Run Code Online (Sandbox Code Playgroud)
而且我想在我进入最后一个周期时打印一些.我该怎么做?
鉴于代码..
var dictionary = new Dictionary<string, string>{
{ "something", "something-else" },
{ "another", "another-something-else" }
};
dictionary.ForEach( item => {
bool isLast = // ... ?
// do something if this is the last item
});
Run Code Online (Sandbox Code Playgroud)
我基本上想看看我在ForEach迭代中使用的项目是否是字典中的最后一项.我试过了
bool isLast = dictionary[ item.Key ].Equals( dictionary.Last() ) ? true : false;
Run Code Online (Sandbox Code Playgroud)
但那不起作用......
我有一个使用 foreach 关键字的循环:
foreach ($ln in Get-Content "c:\ATextFile.txt" )
Run Code Online (Sandbox Code Playgroud)
是否可以在迭代过程中找出 $ln 引用的数组索引?或者我是否需要为每次循环迭代创建并增加一个单独的计数变量?
我有一组对象,我想迭代,最终识别某种类型的模式.目前我有一堆if语句检查表达式的标志.例如,我有if(!foundFirstObjectOfTypeA)的内容.一旦我发现AI类型的第一个对象将标志设置为true,我们将不再执行该块并继续前进到下一个块.我有几种类型的模式可以识别,因此它创建了一大块难以理解和丑陋的if语句.
有没有办法在不评估foreach循环中的表达式的情况下查看/查看标识符?如果我可以按照if(identifer == ObjectA && identifer.next == ObjectB)的方式做一些事情,那么它将使我的代码更具可读性和可理解性,而且我可以在不必设置标志的情况下进行处理.
如果没有直接的方法/方式,有人有一些聪明的变通方法来模拟我想要的效果吗?
我需要从ForEachLinq 中调用函数,并且需要发送一个字符串参数和索引ForEach
List<string> listString= new List<string>();
listString.ForEach((str, i) => { Func(str, i) , i++});
private ResponseBase Func(string s,int i)
{
Run Code Online (Sandbox Code Playgroud) c# ×9
foreach ×4
.net ×2
dictionary ×2
linq ×2
debugging ×1
for-loop ×1
iteration ×1
loops ×1
powershell ×1
silverlight ×1