2016-09-06 3 views
-1

Ich war mit EMGUCV Programmierung in C# versuchen, wenn ich in diesen Fehler lautete:C# Kann nicht als ref passieren

Fehler 1 kann nicht ‚currentFrameBlob‘ als ref oder out-Argument übergeben, da es sich um eine ‚foreach Iterationsvariable ist '

Fehler 2 Kann nicht passieren ‚currentFrameBlob foreach Iterationsvariable‚‘als ref- oder out-Argument, weil es sich um eine‘

es wird in diesem Codeblock.

public void matchCurrentFrameBlobsToExistingBlobs(ref List<Blob> existingBlobs, ref List<Blob> currentFrameBlobs) 
{ 
    foreach (Blob existingBlob in existingBlobs) 
    { 
     existingBlob.blnCurrentMatchFoundOrNewBlob = false; 
     existingBlob.predictNextPosition(); 
    } 

    foreach (Blob currentFrameBlob in currentFrameBlobs) 
    { 
     int intIndexOfLeastDistance = 0; 
     double dblLeastDistance = 1000000.0; 
     for (int i = 0; i <= existingBlobs.Count() - 1; i++) 
     { 
      if ((existingBlobs[i].blnStillBeingTracked == true)) 
      { 
       double dblDistance = distanceBetweenPoints(currentFrameBlob.centerPositions.Last(), existingBlobs[i].predictedNextPosition); 

       if ((dblDistance < dblLeastDistance)) 
       { 
        dblLeastDistance = dblDistance; 
        intIndexOfLeastDistance = i; 
       } 
      } 
     } 

     if ((dblLeastDistance < currentFrameBlob.dblCurrentDiagonalSize * 0.5)) 
     { 
      addBlobToExistingBlobs(ref currentFrameBlob, ref existingBlobs, ref intIndexOfLeastDistance); 
     } 
     else 
     { 
      addNewBlob(ref currentFrameBlob, ref existingBlobs); 
     } 
    } 

ich über den Fehler zu lesen und es scheint mir, dass dies einer jener Macken von C# ist. Was ist der effizienteste Weg, um mit dieser Art von Fehlern umzugehen? Im Moment fürchte ich mich vor Änderungen, da ich keine Ahnung habe, wie ich es lösen kann, ohne es noch schlimmer zu machen.

+6

erste Frage zu beantworten - brauchen Sie wirklich, diese Dinge mit Bezug zu vorbei? –

+0

Mein Gott, Sie benutzen 'ref' überall –

+0

Sie müssen o' ref' lesen und wie und wann Sie sie auch zeigen, wo und wie Sie die 'existingBlobs && currentFrameBlobs' deklarieren Ich glaube wirklich nicht, dass Sie müssen sie als "ref" – MethodMan

Antwort

-3

Simplest fix:

foreach (Blob currentFrameBlob2 in currentFrameBlobs) 
{ 
    Blob currentFrameBlob = currentFrameBlob2; 
    //.... 
+0

Ja, aber die wirkliche Frage, die man sich stellen sollte, ist, warum das OP alles durch Ref weiterleitet, sollte das OP 'ref Schlüsselwort in msdn nachlesen. – MethodMan

+0

Aber das war nicht das, was er fragte. Er hatte Angst, große Veränderungen vorzunehmen. –

+0

Angst haben wird Sie nirgends in der Programmierung, zumindest bis zum Jahr 2997, wenn sie anfangen, nach pensionierten C# Winforms Programmierer suchen, um die Y3k Probleme zu beheben. –

Verwandte Themen