2009-04-30 7 views
0

J'essaie d'obtenir une instruction if qui indique si mon tableau de points à "i" (initialisé dans une boucle For) est égal à X et Y d'un cercle (qui est défini sur smallcircle.X et smallcircle.Y). Je sais ce que je dois faire dans la déclaration if, mais je ne peux pas obtenir le statut de si elle fonctionne. Quelle est la syntaxe pour cela?Que dois-je faire pour cette ligne de code? (C#)

ont pour l'instant:

if (centerPoints[i] == smallcircle.X, smallcircle.Y) 

Il n'aime pas qu'un peu.

Répondre

11

Probablement ceci:

if (centerPoints[i].X == smallcircle.X && centerPoints[i].Y == smallcircle.Y) 
2
if ((centerPoints[i].X == smallcircle.X) && (centerPoints[i].Y == smallcircle.Y)) 
4

points centraux [i] est une instance de point, non?

Dans ce cas, cette ...

if (centerPoints[i] == new Point(smallcircle.X, smallcircle.Y)) 

... devrait faire l'affaire

mise à jour

De quel type est votre cercle? Si c'est le vôtre alors pourquoi n'a-t-il pas une propriété Centre de type Point. Cela rendrait votre vie plus facile.

+0

Don » J'aime ça. Un nouvel objet à chaque vérification? –

+0

@Luca Point est en fait une structure. Ce n'est toujours pas une raison pour en créer un nouveau à chaque fois, mais il n'y a pas de surcharge de GC. – BFree

+0

Création d'objet inutile. De plus, je trouve cela moins lisible, mais c'est une question de préférence. –

2

Vous recherchez l'opérateur logique AND, qui en C# est &&. Il est utilisé pour vérifier si les deux conditions sont vraies.

Alors que:

if(pts[i] == smallcircle.X && pts[i] == smallcircle.Y) { 
// Both are true so do this... 
} 

Si vous voulez vérifier si l'une des conditions est vrai, utilisez le LOGIAL opérateur OR, ||:

if(pts[i] == smallcircle.X || pts[i] == smallcircle.Y) { 
// Either one or the other condition is true, so do this... 
} 
2

Encore une chose:

Si c'est la seule chose chose que fait votre boucle, vous pouvez écrire toute la boucle comme ceci:

foreach (Point point in centerPoints.Where(p => p.X == smallcircle.X && p.Y == smallcircle.Y)) 
{ 
    // 
} 
0

Une autre option consiste à remplacer la méthode Equals() dans votre struct Point, voici un exemple de celui que je l'ai utilisé:

struct Point 
{ 
    public int X; 
    public int Y; 

    public Point(int x, int y) { X = x; Y = y; } 

    public override bool Equals(object obj) 
    { 
     return obj is Point && Equals((Point)obj); 
    } 

    public bool Equals(Point other) 
    { 
     return (this.X == other.X && this.Y == other.Y); 
    } 

    public override int GetHashCode() 
    { 
     return X^Y; 
    } 

    public override string ToString() 
    { 
     return String.Format("({0}, {1})", X, Y); 
    } 

    public static bool operator ==(Point lhs, Point rhs) 
    { 
     return (lhs.Equals(rhs)); 
    } 

    public static bool operator !=(Point lhs, Point rhs) 
    { 
     return !(lhs.Equals(rhs)); 
    } 

    public static double Distance(Point p1, Point p2) 
    { 
     return Math.Sqrt((p1.X - p2.X) * (p1.X - p2.X) + (p1.Y - p2.Y) * (p1.Y - p2.Y)); 
    } 
} 

Ainsi, votre code serait:

Point smallcircle = new Point(5, 5); 
if (centerPoints[i] == smallcircle) 
{ 
    // Points are the same... 
} 
Questions connexes