-5

如何创建包含对象的数组,提示用户输入每个对象的数据?我有一些代码,但出现了一些不存在“名称”的错误

//Main 
public class TaxPayerDemo
{
    public static void Main()
    {
        Taxpayer[] t = new Taxpayer[10];
        int x;
        for (x = 0; x < t.Length; ++x)
        {
            t[x] = new Taxpayer(SSN, Gross);
            Console.WriteLine("Type your SSN");
            t.SSN = Console.ReadLine();
            Console.WriteLine("Please enter your income");
            t.Gross = Convert.ToString(Console.ReadLine());


        }
    }
    class Taxpayer
    {

        private string ssn;
        private double gross; 
        private double tax;


        public string SSN
        {
            get
            {
                return ssn;

            }
            set
            {
                CalcTax();
            }
        }
        public double Gross
        {
            get
            {
                return gross;

            }
            set
            {
                CalcTax();
            }
        }

        private void CalcTax()
        {
            if (tax < 30000)
            {
                tax = .15 * Gross;
            }
            else
                if (tax > 30000)
                {
                    tax = .28 * Gross;
                }
            }
        }
    }
}

错误:

错误 4“System.Array”不包含“Gross”的定义,并且找不到接受“System.Array”类型的第一个参数的扩展方法“Gross”(您是否缺少 using 指令或程序集引用?) C:\homework\300\ConsoleApplication11\ConsoleApplication1\Class1.cs 20 19 ConsoleApplication1

错误 3“System.Array”不包含“SSN”的定义,并且找不到接受“System.Array”类型的第一个参数的扩展方法“SSN”(您是否缺少 using 指令或程序集引用?) C:\homework\300\ConsoleApplication11\ConsoleApplication1\Class1.cs 18 19 ConsoleApplication1

错误 2 当前上下文中不存在名称“Gross” C:\homework\300\ConsoleApplication11\ConsoleApplication1\Class1.cs 16 42 ConsoleApplication1

错误 1 ​​当前上下文中不存在名称“SSN”C:\homework\300\ConsoleApplication11\ConsoleApplication1\Class1.cs 16 37 ConsoleApplication1

4

2 回答 2

1

错误1和2就是这行代码引起的

t[x] = new Taxpayer(SSN, Gross);

在这里,SSNandGross不是函数内的变量或TaxPayerDemo类的成员。

错误 3 和 4 来自这部分代码:

t.SSN = Console.ReadLine();
Console.WriteLine("Please enter your income");
t.Gross = Convert.ToString(Console.ReadLine());

您正在尝试访问SSN,并且Gross好像它们是数组本身的属性,但它们实际上是其元素的属性。

接下来你有一个问题,因为Gross它是 type double,但Convert.ToString返回一个string. 您必须将控制台输入解析为 adouble以将其分配给您的属性。

它应该是:

t[x] = new Taxpayer();
...
t[x].SSN = Console.ReadLine();
Console.WriteLine("Please enter your income");
t[x].Gross = double.Parse(Console.ReadLine());

正如Paul Sasik 的回答所指出的那样,CalcTax方法中还有另一个。您的实施有

if (tax < 30000)
...
else if (tax > 30000)

tax == 30000这意味着存在tax根本不会计算的情况。其次,我想知道您为什么要尝试tax使用tax. 第一次调用后,该值可能会发生变化。我认为你的意思是测试Gross。我会推荐这样的东西:

var rate = (this.Gross < 30000) ? 0.15 : 0.28;
this.tax = rate * this.Gross
于 2013-03-15T04:08:01.327 回答
1

有很多问题。试试这个:(请注意,我将数组大小减少到 2 以便于测试。)

using System;

public class TaxPayerDemo
{
    public static void Main()
    {
        Taxpayer[] t = new Taxpayer[2];
        int x;
        for (x = 0; x < t.Length; ++x)
        {
            t[x] = new Taxpayer();//SSN, Gross);
            Console.WriteLine("Type your SSN");
            t[x].SSN = Console.ReadLine();
            Console.WriteLine("Please enter your income");
            t[x].Gross = double.Parse(Console.ReadLine());
        }

        for (x = 0; x < t.Length; ++x)
        {
                            t[x].CalcTax();
            Console.WriteLine(t[x].SSN + " " + t[x].Gross + " " + t[x].Tax);
        }

        Console.ReadKey();
    }
}

class Taxpayer
{
    public double Tax { get; set; }
    public string SSN { get; set; }
    public double Gross { get; set; }

    public void CalcTax()
    {
        if (Gross < 30000)
        {
            Tax = .15 * Gross;
        }
        else if (Gross >= 30000)
        {
            Tax = .28 * Gross;
        }
    }
}
于 2013-03-15T04:11:52.260 回答