1. Зачем A и B передаются как ref? Вы ведь не меняете эти матрицы.
+1: ref нужен, только если Вы в своем методе меняете матрицы A и B, причем не поэлементно, а целиком, типа
Код:
A = new double[10, 10];
2. TempVar надо бы объявить внутри For(), а то параллелиться не будет.
Параллелиться, скорее всего, будет, только вот работать будет неправильно (компилятор же понятия не имеет, что такое Parallel.For, функция и функция, поэтому просто использует общую копия переменной TempVar для всех потоков, без всякой синхронизацации).
3. Вроде не надо вычитать единицу из ANRows.
+1: 3-й параметр вызова называется 'toExclusive', т. е. выполнение "цикла" закончится на последнем значении, меньшем данного.
Ну а по поводу этой ошибки
Error 1 Cannot use ref or out parameter 'A' inside an anonymous method, lambda expression, or query expression
вот здесь почитайте внимательно:
Lambda Expressions (C# Programming Guide):
Цитата:
The following rules apply to variable scope in lambda expressions:
A variable that is captured will not be garbage-collected until the delegate that references it goes out of scope.
Variables introduced within a lambda expression are not visible in the outer method.
A lambda expression cannot directly capture a ref or out parameter from an enclosing method.
A return statement in a lambda expression does not cause the enclosing method to return.
A lambda expression cannot contain a goto statement, break statement, or continue statement whose target is outside the body or in the body of a contained anonymous function.