c #newbie error变量但用作方法

时间:2014-11-21 02:41:39

标签: c#

请帮忙,因为我还是c#的新手并且不知道如何解决这个问题。我正在努力制定一个人必须支付的税款代码,具体取决于他的国籍。但每当我尝试运行代码时,错误" a是一个变量,但用作方法"来了。
 另一个问题也发生在我身上,即使我删除了一个完全是继续采取泰国条件即使我明确表示为高棉或viet条件(person = khmer,person = viet)  谢谢你的时间

int a=0;
        bool person,khmer,viet,thai;
        khmer=true;
        thai = true;
        viet = true;
        person = khmer;


        String b;
        b= "";



        if (person == khmer)
        {
            a = 0;
            b="khmer";
        }
        if (person == viet)
        {
            a = 10;
            b = "viet";
        }
        if (person == thai)
        {
            a = 15;
            b = "thai";
        }


        else
        {
            a = 20;
            b = "alien";
        }
        Console.WriteLine("he pays " +a ("and he is from ")+b);
        Console.In.ReadLine();

4 个答案:

答案 0 :(得分:2)

更改此行,

Console.WriteLine("he pays " +a ("and he is from ")+b);

Console.WriteLine(string.Format("he pays {0} and he is from {1}", a, b));

对于你的第二个问题,这是因为它们具有相同的值。在你的代码中

bool person,khmer,viet,thai;
khmer=true;
thai = true;
viet = true;
person = khmer;

即使你改变 person = khmer,person = thai或person = viet 。 person的值始终为 true

所以在你的if语句中。

if (person == khmer)
        {
            a = 0;
            b="khmer";
        }
        if (person == viet)
        {
            a = 10;
            b = "viet";
        }
        if (person == thai)
        {
            a = 15;
            b = "thai";
        }

始终输入if括号,因为它们的值相同(true)。尝试将thai,viet,kmer更改为整数或枚举。

int person,khmer,viet,thai;
khmer = 1;
thai = 2;
viet = 3;
person = khmer;

答案 1 :(得分:2)

在你的最终WriteLine中,你这样做:

Console.WriteLine("he pays " +a ("and he is from ")+b);

对于编译器,看起来a("and he is from ")是方法调用。您使用参数a“呼叫”"and he is from"

你错过了+。它应该是:

Console.WriteLine("he pays " + a + "and he is from " + b);

或者更好,使用WriteLine的string formatting版本:

Console.WriteLine("he pays {0} and he is from {1}", a, b);

答案 2 :(得分:1)

关于问题的第二部分:

  

另一个问题也发生在我身上,即使我删除了一个完全是继续采取泰国条件即使我明确表示为高棉或viet条件(人=高棉,人= viet)

你的逻辑存在缺陷。

您已将所有国籍/地区硬编码为True。并且设置person = khmer实际上只是设置了person = True,后者在代码中没有告诉您任何内容。

您最终运行每个 if语句,因此最终if (person == thai)胜出,a = 15b = "thai" 每次

您必须更改代码才能接受参数。

我建议用代表国籍的枚举替换你的字符串和数字。

// You can specify nationalities, and even assign each one the correct numerical value
public enum Nationality
{
    khmer = 0,
    viet = 10,
    thai = 15,
    alien = 20,
}

// Then in your method, just cast the selected nationality to an int to get the
//  numerical value, and call ToString() to get the name
private void ReportNationality(Nationality nationality)
{
    Console.WriteLine("he pays {0} and he is from {1}",
                      (int)nationality, nationality.ToString());

    Console.In.ReadLine();
}

答案 3 :(得分:0)

你需要在" a"

之后添加一个+
 Console.WriteLine("he pays " +a  + ("and he is from ")+b);