2016-01-11 1 views
-3

Я хотел бы определить некоторые операции для List in C#. Например, добавление (+) и транспонирование ('). Однако при компиляции кода возникли ошибки. Я определил класс матрицы, который унаследован от List>. Кроме того, я реализовал оператор «+» и «. Первый из них хорош, но когда я назвал его главным, появляются ошибки. Второй метод не может быть даже скомпилирован. Может ли кто-нибудь помочь? Большое спасибо.Определить оператор для списка в C#

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace test 
{ 
    class Matrix : List<List<double>> 
    { 
     public static Matrix operator +(Matrix a, Matrix b) 
     { 
      Matrix c = new Matrix(); 
      int i, j; 

      for (i = 0; i < a.Count; i++) 
      { 
       for (j = 0; j < a[1].Count; j++) 
       { 
        c[i][j] = a[i][j] + b[i][j]; 
       } 

      } 

      return c; 

     } 


     public static Matrix operator ' (Matrix a) 
     { 
      Matrix b = new Matrix(); 
      int i, j; 

      for (i = 0; i<a.Count; i++) 
      { 
       for (j = 0; j < a[1].Count; j++) 
       { 
       b[j][i] = a[j][i]; 
       } 

      } 

      return b; 

     } 


     public static int Main(string[] args) 
     { 

      Matrix x = new Matrix { new List<double> { 1, 2, 5, 2 }, new List<double> { 3, 4, 0, 7 } }; 
      Matrix y = new Matrix { new List<double> { 1, 2, 5, 2 }, new List<double> { 3, 4, 0, 7 } }; 
      Matrix z = new Matrix(); 

      z = x + y; 

      Console.WriteLine(z); 

      return 0; 
     } 
    } 
} 
+0

Вы не можете просто выбрать для «перегрузки» любой произвольный символ вы хотите. Нет такого оператора, как '' ' – SimpleVar

+0

Какие ошибки вы получаете? Какова конкретная проблема, с которой вы сталкиваетесь? – Sayse

+0

Ниже приведен список перегрузочных операторов https://msdn.microsoft.com/en-us/library/8edha89s%28VS.71%29.aspx Вот что такое tutorital для операторов перегрузки - https: // msdn .microsoft.com/en-us/library/aa288467% 28v = vs.71% 29.aspx –

ответ

1

не действительный оператор. Перегружаемыми операторами являются:
Unary: + -! ~ ++ - true false
Двоичный: + - * /% & |^< < >> ==! = <> < => =

Некоторые из них также имеют ограничения. Например, операторы сравнения должны быть перегружены парами, а второй параметр операторов сдвига (< < и >>) должен быть int.

Взгляните: C# overloadable operators

+0

ОК, давайте сначала проигнорируем «метод». Как исправить ошибки в «+»? – Frankie

+0

Каковы проблемы в Матрица x = новая Матрица {новый Список {1, 2, 5, 2}, новый Список {3, 4, 0, 7}}; Матрица y = новая матрица {новый Список {1, 2, 5, 2}, новый Список {3, 4, 0, 7}}; Матрица z = новая матрица(); z = x + y; – Frankie

+0

@Frankie 'Matrix c = new Matrix();' создаст пустую матрицу. Он не содержит внутренних списков. Вот почему вы получите 'ArgumentOutOfRangeException' в строке' c [i] [j] = a [i] [j] + b [i] [j]; ' –