弄清楚C#中的一些编程问题(作业)

时间:2018-04-10 20:06:57

标签: c#

{

class AutoPolicy
{
    public int AccountNumber { get; set; }
    public string MakeAndModel { get; set; }
    private string state;
    public string State
    {
        get { return state; }
        set {
            if (State.Equals("MA" || "CT" || "ME" || "NH" || "NJ" || "NY" || "PA" || "VT")
            {
                State = state;
            }
            else
            {
                Console.WriteLine("The state code is wrong.");
            }
        }
    }


    public AutoPolicy(int accountNumber, string makeAndModel, string state)
    {
        AccountNumber = accountNumber;
        MakeAndModel = makeAndModel;
        State = state;
    }

    public bool IsNoFaultState
    {
        get
        {
            bool noFaultState;
            switch (State)
            {
                case "MA":
                case "NJ":
                case "NY":
                case "PA":
                    noFaultState = true;
                    break;
                default:
                    noFaultState = false;
                    break;
            }
            return noFaultState;
        }
    }



    class AutoPolicyTest
    {
        static void Main()
        {
            AutoPolicy policy1 = new AutoPolicy(11111111, "Toyota Camry", "NJ");
            AutoPolicy policy2 = new AutoPolicy(22222222, "Ford Fusion", "ME");

            PolicyInNoFaultState(policy1);
            PolicyInNoFaultState(policy2);
        }
        public static void PolicyInNoFaultState(AutoPolicy policy)
        {
            Console.WriteLine("The auto policy:");
            Console.Write($"Account #: {policy.AccountNumber};");
            Console.WriteLine($"Car: {policy.MakeAndModel};");
            Console.Write($"State {policy.State};");
            Console.Write($"{(policy.IsNoFaultState ? "is" : "is not")}");
            Console.WriteLine(" a no-fault state\n");
        }
    }
}
}

这是我的家庭作业代码我必须修改书中的程序(我更喜欢制作我自己的程序),但是说明说:修改程序以验证两个字母的州代码东北各州。然后列出不同的状态和相应的代码,所有这些都在我的代码中。然后它说:在State属性的set访问器中,使用逻辑OR(||)运算符在if ... else语句中创建复合条件,该语句将方法的参数与每个双字母代码进行比较。

我为巨大的代码块道歉,但我不确定是什么导致了这个问题(我对c#不熟悉),但我得到的错误是:运算符'||'不能应用于'string'和'string'类型的操作数。任何帮助都会受到赞赏,因为这对我来说没什么意义,因为它对语言不熟悉。谢谢!

2 个答案:

答案 0 :(得分:1)

表单中的表达式

"MA" || "CT"

没有扩展到对State变量的一系列比较,正如您所预期的那样。相反,它尝试将逻辑OR应用于两个字符串,这是一个未在C#中定义的操作,因此编译错误。

如果您想寻求更短的解决方案,可以写下:

if(new List<string> { "MA", "CT", "ME" }.Contains(value)) 
{
    /* ... */
}

它构造一个字符串列表,然后测试分配给你的属性的字符串是否是该列表的一个元素。

此外,在您当前的代码中,您错误地引用其setter中的属性State,这将导致运行时堆栈溢出。该作业应该是state = value

答案 1 :(得分:0)

关闭,但应该是这样:

if (State.Equals("MA") || State.Equals("CT") || State.Equals("ME") || State.Equals("NH") || State.Equals("NJ") || State.Equals("NY") || State.Equals("PA") || State.Equals("VT"))
{
    State = state;
}