C# : 将 while 循环替换为 ForEach (Acrobat SDK)



这可以替换为ForEach或IEnumrable吗

IAFormApp formApp = new AFormAppClass();    
IFields myFields = (IFields)formApp.Fields;
IEnumerator myEnumerator = myFields.GetEnumerator();
while (myEnumerator.MoveNext())
{ 
IField myField = (IField)myEnumerator.Current;
}

myEnumerator.MoveNext()没有按顺序遍历我的 PDF 字段。

我不熟悉Adobe SDK API。但我认为你比你想象的更接近。似乎IFields是从IEnumerableIEnumerable<IField>派生出来的。

在 C# 中,可以使用 foreach 循环访问集合。

例如:

IAFormApp formApp = new AFormAppClass();    
IFields myFields = (IFields)formApp.Fields;

foreach(IField field in myFields)
{
// do something with the field
}

在后台,foreach使用IEnumerable.GetEnumerator()或泛型IEnumerable<T>.GetEnumerator()来循环访问集合中的元素。上述方法GetEnumerator()分别返回一个IEnumeratorIEnumerator<T>

您需要检查IFields的来源。如果它派生自IEnumerable<IField>,则可以使用上面的示例。如果它派生自IEnumerable,则需要将对象转换为所需的对象类型,因为IEnumerator.Current返回一个对象。

有关使用IEnumerable或泛型形式IEnumerable<T>的更多信息,请参见 C# 编程指南。

最新更新