{
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'类型的操作数。任何帮助都会受到赞赏,因为这对我来说没什么意义,因为它对语言不熟悉。谢谢!
答案 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;
}