IComparable issues
I'm pretty new at programming. Currently taking a C# class, where I have to Create a class named Taxpayer. Data fields for Taxpayer objects include the Social Security number (use a string for the type, but do not use dashes within the number), the yearly gross income, and the tax owed. Include a property with get and set accessors for the first two data fields, but make the tax owed a read-only property. The tax should be calculated whenever the income is set. Assume the tax is 15 % of income for incomes under $30,000 and 28 % for incomes that are $30,000 or higher. Write a program that declares an array of ten Taxpayer objects. Prompt the user for data for each object and display the ten objects. 
I'm having problems displaying the total. It only display string32. 
Hope to hear from you, once again keep in mind I'm a newbiee trying to get it right. Thank you. Here's what I got so far:

using System;

namespace TaxPayerDemo
{
    
    class TaxPayerDemo
    {
        public static void Main(string[] args)
        {
            string[] socialSecurityNumber = new string[10];
            int[] grossIncome = new int[10];
            double[] taxArray = new double[10];
            string inputstring;

            for (int x = 0; x < socialSecurityNumber.Length; ++x)
            {
                Console.Write("Enter Social Security Number for taxpayer: ");
                inputstring = Console.ReadLine();
                socialSecurityNumber[0] = inputstring;
                Console.Write("Enter gross income for taxpayer: ");
                inputstring = Console.ReadLine();
                grossIncome[0] = Convert.ToInt32(inputstring);
                Taxpayer own = new Taxpayer();
                own.yearlyGrossIncome = grossIncome[0];
                Rates tp1 = new Rates();
                tp1.CalculateTax(own.yearlyGrossIncome);

                own.getRates();
                taxArray[0] = 0;

            }
            for (int x = 0; x < socialSecurityNumber.Length; ++x)
            {
                Console.WriteLine("Taxpayer SSN: {0} income ${1} Tax is ${2}", socialSecurityNumber, grossIncome, taxArray);

            }
        }

    
    
    
    public class Rates
    {
        public readonly int incomeLimit;

        public readonly double lowTaxRate;

        public readonly double highTaxRate;

        public Rates()
        {
            incomeLimit = 30000;
            lowTaxRate = .15;
            highTaxRate = .28;


        }

        public Rates(int limit, double lowRate, double highRate)
        {
            incomeLimit = limit;
            lowTaxRate = lowRate;
            highTaxRate = highRate;
        }
        public void CalculateTax(double income)
        {
            double tax;

            if (income < incomeLimit)
            {
                tax = income * lowTaxRate;
            }
            if (income > incomeLimit)
            {
                tax = income * highTaxRate;
            }
            Taxpayer tt = new Taxpayer();

        }
    }



    public class Taxpayer : IComparable
    {
        public string socialSecurityNumber { get; set; }
        public int yearlyGrossIncome { get; set; }
        public readonly double taxOwed;

        int IComparable.CompareTo(Object o)
        {
            int returnVal;
            Taxpayer temp = (Taxpayer)o;
            if (this.taxOwed > temp.taxOwed)
                returnVal = 1;
            else
                if (this.taxOwed < temp.taxOwed)
                    returnVal = -1;
                else
                    returnVal = 0;

            return returnVal;
        }


        
        

        public void getRates()
        {
            int incomeLimit;
            double lowRate;
            double highRate;


            Console.Write("Do you want default values (enter D) or enter your own (enter O)? ");
            char values = Convert.ToChar(Console.ReadLine());
            Console.WriteLine();
            if (values == 'd' || values == 'D')
            {
                Rates deval = new Rates();
                incomeLimit = deval.incomeLimit;
                lowRate = deval.lowTaxRate;
                highRate = deval.highTaxRate;
                deval.CalculateTax(yearlyGrossIncome);

            }
            if (values == 'o' || values == 'O')
            {
                Console.Write("Enter the dollar limit: ");
                incomeLimit = Convert.ToInt32(Console.ReadLine());
                Console.Write("Enter the low rate: ");
                lowRate = Convert.ToDouble(Console.ReadLine());
                Console.Write("Enter the high rate: ");
                highRate = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine();

            }

        }

      
    }
    
        }
    }


IComparable issues
===

I'm pretty new at programming. Currently taking a C# class, where I have to Create a class named Taxpayer. Data fields for Taxpayer objects include the Social Security number (use a string for the type, but do not use dashes within the number), the yearly gross income, and the tax owed. Include a property with get and set accessors for the first two data fields, but make the tax owed a read-only property. The tax should be calculated whenever the income is set. Assume the tax is 15 % of income for incomes under $30,000 and 28 % for incomes that are $30,000 or higher. Write a program that declares an array of ten Taxpayer objects. Prompt the user for data for each object and display the ten objects. 
I'm having problems displaying the total. It only display string32. 
Hope to hear from you, once again keep in mind I'm a newbiee trying to get it right. Thank you. Here's what I got so far:

using System;

namespace TaxPayerDemo
{
    
    class TaxPayerDemo
    {
        public static void Main(string[] args)
        {
            string[] socialSecurityNumber = new string[10];
            int[] grossIncome = new int[10];
            double[] taxArray = new double[10];
            string inputstring;

            for (int x = 0; x < socialSecurityNumber.Length; ++x)
            {
                Console.Write("Enter Social Security Number for taxpayer: ");
                inputstring = Console.ReadLine();
                socialSecurityNumber[0] = inputstring;
                Console.Write("Enter gross income for taxpayer: ");
                inputstring = Console.ReadLine();
                grossIncome[0] = Convert.ToInt32(inputstring);
                Taxpayer own = new Taxpayer();
                own.yearlyGrossIncome = grossIncome[0];
                Rates tp1 = new Rates();
                tp1.CalculateTax(own.yearlyGrossIncome);

                own.getRates();
                taxArray[0] = 0;

            }
            for (int x = 0; x < socialSecurityNumber.Length; ++x)
            {
                Console.WriteLine("Taxpayer SSN: {0} income ${1} Tax is ${2}", socialSecurityNumber, grossIncome, taxArray);

            }
        }

    
    
    
    public class Rates
    {
        public readonly int incomeLimit;

        public readonly double lowTaxRate;

        public readonly double highTaxRate;

        public Rates()
        {
            incomeLimit = 30000;
            lowTaxRate = .15;
            highTaxRate = .28;


        }

        public Rates(int limit, double lowRate, double highRate)
        {
            incomeLimit = limit;
            lowTaxRate = lowRate;
            highTaxRate = highRate;
        }
        public void CalculateTax(double income)
        {
            double tax;

            if (income < incomeLimit)
            {
                tax = income * lowTaxRate;
            }
            if (income > incomeLimit)
            {
                tax = income * highTaxRate;
            }
            Taxpayer tt = new Taxpayer();

        }
    }



    public class Taxpayer : IComparable
    {
        public string socialSecurityNumber { get; set; }
        public int yearlyGrossIncome { get; set; }
        public readonly double taxOwed;

        int IComparable.CompareTo(Object o)
        {
            int returnVal;
            Taxpayer temp = (Taxpayer)o;
            if (this.taxOwed > temp.taxOwed)
                returnVal = 1;
            else
                if (this.taxOwed < temp.taxOwed)
                    returnVal = -1;
                else
                    returnVal = 0;

            return returnVal;
        }


        
        

        public void getRates()
        {
            int incomeLimit;
            double lowRate;
            double highRate;


            Console.Write("Do you want default values (enter D) or enter your own (enter O)? ");
            char values = Convert.ToChar(Console.ReadLine());
            Console.WriteLine();
            if (values == 'd' || values == 'D')
            {
                Rates deval = new Rates();
                incomeLimit = deval.incomeLimit;
                lowRate = deval.lowTaxRate;
                highRate = deval.highTaxRate;
                deval.CalculateTax(yearlyGrossIncome);

            }
            if (values == 'o' || values == 'O')
            {
                Console.Write("Enter the dollar limit: ");
                incomeLimit = Convert.ToInt32(Console.ReadLine());
                Console.Write("Enter the low rate: ");
                lowRate = Convert.ToDouble(Console.ReadLine());
                Console.Write("Enter the high rate: ");
                highRate = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine();

            }

        }

      
    }
    
        }
    }

