1

を介して値を置き換える方法がないことに気付きましたLinkedList.Enumerator

たとえば、以下の Java コードを C# に移植しようとしています。

Java コード:

ListIterator<Double> itr1 = linkedList1.listIterator();
ListIterator<Double> itr2 = linkedList2.listIterator();
while(itr1.hasNext() && itr2.hasNext()){
    Double d = itr1.next() + itr2.next();
    itr1.set(d);
}

C# コード:

LinkedList<Double>.Enumerator itr1 = linkedList1.GetEnumerator();            
LinkedList<Double>.Enumerator itr2 = linkedList2.GetEnumerator();

 while(itr1.MoveNext() && itr2.MoveNext()){                
    Double d = itr1.Current + itr2.Current;
    // Opps. Compilation error!
    itr1.Current = d;
}

私が使用できる他のテクニックはありますか?

4

2 に答える 2

5

C# のLinkedList列挙子は、ノードではなく、を列挙します。

Java バージョンのようにノードを変更する場合は、ノードを手動で「列挙」する必要があると思います。

LinkedListNode<Double> nod1 = linkedList1.First;
LinkedListNode<Double> nod2 = linkedList2.First;
while (nod1 != null && nod2 != null)
{
    Double d = nod1.Value + nod2.Value;              
    nod1.Value = d;
    nod1 = nod1.Next;
    nod2 = nod2.Next;
} 
于 2012-10-08T09:46:31.030 に答える
0

新しいリストを作成するだけで十分かもしれません。

linkedList1 = new LinkedList<double> (linkedList1.Zip(linkedList2, (first, second) => first + second));

元のリストを変更する必要がある場合は、次のようにします。

 var tmp = linkedList1.Zip(linkedList2, (first, second) => first + second).ToList ();
 linkedList1.Clear ();
 linkedList1.AddRange (tmp);
于 2012-10-08T09:41:15.020 に答える