c#将纳税人类别数据成员设置为等于另一种方法

| 我对C#还是很陌生,对如何设置数据成员然后使用另一种方法计算税收感到困惑。这是程序的这一部分应该做的: \“如果用户选择默认的默认值,则将使用默认构造函数实例化费率对象,并将Taxtaxer类数据成员的税额设置为等于调用费率对象CalculateTax方法返回的值。 -我有一个switch语句,如果他们选择\'D \',则要求默认的构造函数,我不确定如何将纳税人类数据设置为默认值,我不确定CalculateTax方法是否正确。 然后如果他们选择\'O \',则执行相同类型的操作 这是我到目前为止的内容:
using System;
interface Icomparable
{
    int CompareTo(Object o);
}
    class rates
    {
        public double Limit{get;}
        public double LowRate{get;}
        public double HighRate{get;}
        private rates()
        {
            Limit = 30000;
            LowRate = 0.15;
            HighRate = 0.28;
        }
        public rates(double Limit; double LowRate; double HighRate;)
        {
            Console.Write(\"Enter dollar limit: \");              
            Limit = Convert.ToDouble(Console.ReadLine());
            Console.Write(\"Enter the low rate: \");
            LowRate = Convert.ToDouble(Console.ReadLine());
            Console.Write(\"Enter the high rate: \");
            HighRate = Convert.ToDouble(Console.ReadLine());
        }
        public CalculateTax()
        {
            if(Income < Limit)
            {TaxOwed = (Income * LowRate)}
            else
            {TaxOwed = (Income * HighRate)}
        }
    }

    public class taxpayer : IComparable
    {
        public string SSN{get; set;}
        public double Income{get; set;}
        public double TaxOwed{get;}

        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 getRates()
    {
    double Limit;
    double LowRate;
    double HighRate;
    Console.WriteLine(\"Do you want default values(enter D) or enter your own (enter O)?\");
    entry = Convert.ToChar(Console.ReadLine());

    switch (entry)  //set switch
    {
        case\'D\':
            rates();
            break;
        case\'O\':
            rates(double Limit; double LowRate; double HighRate;)
            break;
        default:
            Console.WriteLine(\"Invalid input\");
            goto getRates();
    }


    }
    }
任何帮助,将不胜感激。     
已邀请:
我不明白为什么要继续重新创建一个具有所有值的对象。 这是备用模式,静态预设+工厂
class Rates
{
    public double Limit{get;}
    public double LowRate{get;}
    public double HighRate{get;}

    static readonly Rates default = new Rates(30000,0.15,0.28);
    static readonly Rates govna = new Rates(300000,0.1,0.2);
    static readonly Rates priest = new Rates(300,0.05,0.07);

    public static Rates createRates()
    {
        double Limit; double LowRate; double HighRate;
        Console.Write(\"Enter dollar limit: \");              
        Limit = Convert.ToDouble(Console.ReadLine());
        Console.Write(\"Enter the low rate: \");
        LowRate = Convert.ToDouble(Console.ReadLine());
        Console.Write(\"Enter the high rate: \");
        HighRate = Convert.ToDouble(Console.ReadLine());

        return new Rates( Limit, LowRate, HighRate );
    }

    private Rates(double limit; double lowRate; double highRate;)
    {
        Limit = limit;
        LowRate = lowRate;
        HighRate = highRate;
    }

    public double CalculateTax( double Income)
    {
        if(Income < Limit)
        {return (Income * LowRate)}
        else
        {return (Income * HighRate)}
    }
}
哦,goto怎么了?
while( null == ratesResult ){
    Console.WriteLine(\"Do you want default values(enter D) or enter your own (enter O)?\");
    entry = Convert.ToChar(Console.ReadLine());

    switch (entry)  //set switch
    {
        case\'D\':
            ratesResult = Rates.default;
            break;
        case\'O\':
            ratesResult = Rates.createRates();
            break;
        default:
            Console.WriteLine(\"Invalid input\");
    }

}
    
伙伴,您的代码有很多问题。这里有一些建议可以指导您正确的方向。 在以下属性中,您还应该有一个集合;访问器能够存储这些值。
    public double Limit{get;}
    public double LowRate{get;}
    public double HighRate{get;}
在以下功能中,是否要提示用户输入值?如果是这样,请将第一行从
public rates(double Limit; double LowRate; double HighRate;)
public rates(bool dummy)
现在你的代码看起来像
    public rates(bool dummy) //Note that dummy is not used in this function.  It just distinguishes rates() from rates(bool)
    {
        Console.Write(\"Enter dollar limit: \");              
        Limit = Convert.ToDouble(Console.ReadLine());
        Console.Write(\"Enter the low rate: \");
        LowRate = Convert.ToDouble(Console.ReadLine());
        Console.Write(\"Enter the high rate: \");
        HighRate = Convert.ToDouble(Console.ReadLine());
    }
虚拟对象只是为了让代码区分您的两个不同功能。 在您的switch语句中,只需调用rates(bool dummy)函数即可,而不是另一个函数。对于假人,请为它分配true或false,在乎...。它看起来像下面的样子。
switch (entry)  //set switch
{
    case\'D\':
        rates();
        break;
    case\'O\':
        rates(true)
        break;
    default:
        Console.WriteLine(\"Invalid input\");
        goto getRates();
}
您的代码还有更多问题,但是您必须对其进行修改,然后我们才能进一步为您提供帮助。实际上,您应该尝试在VS中使用它,因为编辑器可以通过给您特定的错误来帮助您解决问题。     

要回复问题请先登录注册