2016-12-08 5 views
0

私はクラス行列を持っています。 Matrix m1とm2のオブジェクトを作成します。次に、IEnumerableメソッドを使用して、行列のすべての要素を要約したいと思います。だから私はm1オブジェクトのすべての要素を生成したいと思う。それは私が言う:行列Cの要素を生成できません#

The name 'm1' does not exist in the current context

M1マトリックスオブジェクトの要素を得るために、どのように?

public static Random randDouble = new Random(); 

public static void Main() 
{ 
    Matrix m1 = new Matrix(); 
    Matrix m2 = new Matrix(); 

    InitMatrix(m1); 
    InitMatrix(m2); 
    List<Matrix> matrices = new List<Matrix>(); 
    matrices.Add(m1); 
    matrices.Add(m2); 
    int r = 0; 
    foreach (int v in GridValues()) 
    { 
     r += v; 
    } 
    Console.WriteLine(r); 
} 

public static IEnumerable<int> GridValues() 
{ 
    for (int x = 0; x < 3; x++) 
     for (int y = 0; y < 3; y++) 
      yield return m1[x, y]; 
} 

public static void InitMatrix(Matrix mat) 
{ 
    for (int i = 0; i < 3; i++) 
     for (int j = 0; j < 3; j++) 
      mat[i, j] = randDouble.NextDouble(); 
} 
+0

m1は、 'Main'メソッドのローカル変数であるため、' GridValues'メソッドからアクセスできません。 – Kinetic

答えて

0

あなたの問題はm1Main機能からローカル変数であるということですので、GridValuesではアクセスできません。

機能にパラメータとしてm1を送信できます。

また、Matrixにはdoubleが含まれていて、intの値ではないようです。

public static void Main() 
{ 
    Matrix m1 = new Matrix(); 
    Matrix m2 = new Matrix(); 

    InitMatrix(m1); 
    InitMatrix(m2); 
    List<Matrix> matrices = new List<Matrix>(); 
    matrices.Add(m1); 
    matrices.Add(m2); 
    double r = 0; 
    foreach (double v in GridValues(m1)) 
    { 
     r += v; 
    } 
    Console.WriteLine(r); 
} 

public static IEnumerable<double> GridValues(Matrix m) 
{ 
    for (int x = 0; x < 3; x++) 
     for (int y = 0; y < 3; y++) 
      yield return m[x, y]; 
} 
関連する問題