Задача по C#

Сделать сложение очень больших чисел, которые не влезают в long и int64, заходят как строка, при этом должны быть следующие ограничения:

  • Неотрицательное число
  • В аргументе только цифры
  • Нет ведущих нолей
  • Не пустая строка
  • Целое

Нужно создать класс BigNumber и 3 его метода:

  • Конструктор с ограничениями выше
  • Метод сложения двух объектов (через перегрузку операторов)
  • И перекрыть метод ToString()
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

//сделать сложение очень больших чисел, которые не влезают в long и int64, заходят как строка, при этом должны быть следующие ограничения:
//+не отрицательное число
//+в аргументе только цифры
//+нет ведущих нолей
//+не пустая строка
//+целое

//нужно создать класс bignumber и 3 его метода:
//+конструктор с ограничениями выше
//+метод сложения двух объектов(через перегрузку операторов)
//+и перекрыть метод tostring()

namespace Sum
{
    class Program
    {
        static void Main(string[] args)
        {
            BigNumber a = new BigNumber("175872");
            BigNumber b = new BigNumber("1234567890123456789012345678901234567890");

            //BigNumber a = new BigNumber("19");
            //BigNumber b = new BigNumber("2");
 

            Console.WriteLine(a.ToString());
            Console.WriteLine(b.ToString());
            var r = a + b;
            Console.WriteLine(r.ToString());
            Console.ReadKey();
        }
    }

    public class BigNumber
    {
        string bignumber;

        /// <summary>
        /// Конструктор класса
        /// </summary>
        public BigNumber(string bignum)
        {
            if (bignum.Length == 0)
            {
                Console.WriteLine("Тип вводимых данных не соответсвует требованиям");
                bignumber = null;
                return;
            }
            else
            {
                int x1;
                int x2 = 0;
                int i = 0;
                foreach (var number in bignum)
                {
                    try
                    {
                        x1 = (int)Char.GetNumericValue(number);
                        x2 += x1;
                        bignumber = bignum;
                    }
                    catch (Exception)
                    {
                        Console.WriteLine("Тип вводимых данных не соответсвует требованиям");
                        bignumber = null;
                        break;
                    }
                    if (bignum.Length != 1 && x2 == 0 && i != 0)
                    {
                        Console.WriteLine("Тип вводимых данных не соответсвует требованиям");
                        bignumber = null;
                        break;
                    }

                    i += 1;
                }
            }            
        }

        /// <summary>
        /// Сложение
        /// </summary>
        /// <returns>ответ</returns>
        public static BigNumber operator + (BigNumber a, BigNumber b)
        {
            int[] a_array, b_array, c_array;
            a_array = new int[a.bignumber.Length];
            b_array = new int[b.bignumber.Length];

            int i = 0;
            foreach (var item in a.bignumber)
            {
                a_array[i] = (int)Char.GetNumericValue(item);
                i += 1;
            }

            int j = 0;
            foreach (var item in b.bignumber)
            {
                b_array[j] = (int)Char.GetNumericValue(item);
                j += 1;
            }

            Array.Reverse(a_array);
            Array.Reverse(b_array);

            int temp = 0;
            if (a.bignumber.Length >= b.bignumber.Length)
            {
                c_array = new int[a.bignumber.Length];
                for (int n = 0; n < a.bignumber.Length; n++)
                {
                    if ((n+1) <= b.bignumber.Length)
                    {
                        if (n < a.bignumber.Length-1)
                        {
                            c_array[n] = (a_array[n] + b_array[n] + temp) % 10;
                            temp = (a_array[n] + b_array[n] + temp) / 10;
                        }
                        else
                        {
                            c_array[n] = a_array[n] + b_array[n] + temp;
                        }
                    }
                    else
                    {
                        if (n < a.bignumber.Length - 1)
                        {
                            c_array[n] = (a_array[n] + temp) % 10;
                            temp = (a_array[n] + temp) / 10;
                        }
                        else
                        {
                            c_array[n] = a_array[n] + temp;
                        }
                    }
                }
            }
            else
            {
                c_array = new int[b.bignumber.Length];
                for (int n = 0; n < b.bignumber.Length; n++)
                {
                    if ((n + 1) <= a.bignumber.Length)
                    {
                        if (n < b.bignumber.Length - 1)
                        {
                            c_array[n] = (a_array[n] + b_array[n] + temp) % 10;
                            temp = (a_array[n] + b_array[n] + temp) / 10;
                        }
                        else
                        {
                            c_array[n] = a_array[n] + b_array[n] + temp;
                        }
                    }
                    else
                    {
                        if (n < b.bignumber.Length - 1)
                        {
                            c_array[n] = (b_array[n] + temp) % 10;
                            temp = (b_array[n] + temp) / 10;
                        }
                        else
                        {
                            c_array[n] = b_array[n] + temp;
                        }
                    }
                }
            }

            Array.Reverse(c_array);
            string res = String.Concat<int>(c_array);
            BigNumber res1 = new BigNumber(res);

            return res1;
        }    

        public override string ToString()
        {
            return bignumber;
        }
    }
}