Two thoughts:

1) Is that a floating point Vector2? If that's your custom one, you might want to double check the comparison operator

2) Toss some parenthesis around that if, though Ithinkit should be okay without them, if you're not getting in there, maybe that's the problem.

(OpenList.SingleOrDefault(node => node.Position == Neighbor.Position).G_Vaule + G_Score) < CurrentNode.G_Vaule

Also, why are you doing the if elseif above it, it looks like you have if(A) else if(!A), couldn't that just be if(A) else {//not A implied}

1) Yes, It's a floating point Vector2. Its not my custom class. Its in MonoGame/XNA.

2)I'm 100% sure that this line is the problem. I just don't know how to fix it.

Yeah true. It could be just if(A) else. But when I debugging I wanted things to be explicit. Idk.

I'm looking at the Wiki Pseudocode and I think i'm lost at this part.

tentative_g_score := g_score[current] + dist_between(current,neighbor) if neighbor not in openset or tentative_g_score < g_score[neighbor]

This is the full code

function A*(start,goal) closedset := the empty set // The set of nodes already evaluated. openset := {start} // The set of tentative nodes to be evaluated, initially containing the start node came_from := the empty map // The map of navigated nodes. g_score[start] := 0 // Cost from start along best known path. // Estimated total cost from start to goal through y. f_score[start] := g_score[start] + heuristic_cost_estimate(start, goal) while openset is not empty current := the node in openset having the lowest f_score[] value if current = goal return reconstruct_path(came_from, goal) remove current from openset add current to closedset for each neighbor in neighbor_nodes(current) if neighbor in closedset continue tentative_g_score := g_score[current] + dist_between(current,neighbor) if neighbor not in openset or tentative_g_score < g_score[neighbor] came_from[neighbor] := current g_score[neighbor] := tentative_g_score f_score[neighbor] := g_score[neighbor] + heuristic_cost_estimate(neighbor, goal) if neighbor not in openset add neighbor to openset return failure function reconstruct_path(came_from,current) total_path := [current] while current in came_from: current := came_from[current] total_path.append(current) return total_path