C# 返回语句,在继续之前检查前两个字符

C# 返回语句,在继续之前检查前两个字符,c#,asp.net,C#,Asp.net,嗨,我当前的返回语句,如上所述,如果它不为空,则返回一个推进方法。但是,我的数据库有不同类型的 推进方法由字段中的前两个字母表示(PK、PA、PT等) 在进一步进入return语句之前,我如何检查以确保propulceMethod以“PK”开头 在伪代码中,它可能如下所示: return ship.DefenseType?.PropulsionMethod != null ? new BattleMethod(ship.DefenseType.PropulsionMethod)

嗨,我当前的返回语句,如上所述,如果它不为空,则返回一个推进方法。但是,我的数据库有不同类型的 推进方法由字段中的前两个字母表示(PK、PA、PT等)

在进一步进入return语句之前,我如何检查以确保propulceMethod以“PK”开头

在伪代码中,它可能如下所示:

return ship.DefenseType?.PropulsionMethod != null
    ? new BattleMethod(ship.DefenseType.PropulsionMethod)
    : null;
我试过了

if (ship.DefenseType?.PropulsionMethod).startsWith("PK") 
        && ship.DefenseType?.PropulsionMethod != null)
{
    return new BattleMethod(ship.DefenseType.PropulsionMethod)
}
else
{
    return null;
}
但我得到了这个错误:

运算符&&不能应用于bool和bool类型的操作数


只需添加以下条件:

return ship.DefenseType?.PropulsionMethod != null &&
    ship.DefenseType?.PropulsionMethod.StartsWith("PK")
    ? new BattleMethod(ship.DefenseType.PropulsionMethod)
    : null;

由于运算符是
&&
,因此如果第一个条件为true(在本例中不是null),则将计算第二个条件。

只需添加此条件:

return ship.DefenseType?.PropulsionMethod != null &&
    ship.DefenseType?.PropulsionMethod.StartsWith("PK")
    ? new BattleMethod(ship.DefenseType.PropulsionMethod)
    : null;

由于运算符为
&&
,因此如果第一个条件为真(在本例中为非空),则将评估第二个条件。

您可以直接将可空布尔值与
真值进行比较:

    return ship.DefenseType?.PropulsionMethod != null 
    && ship.DefenseType?.PropulsionMethod.StartsWith("PK")
 ? new BattleMethod(ship.DefenseType.PropulsionMethod) : null;

您可以直接将nullable bool与
true
进行比较:

    return ship.DefenseType?.PropulsionMethod != null 
    && ship.DefenseType?.PropulsionMethod.StartsWith("PK")
 ? new BattleMethod(ship.DefenseType.PropulsionMethod) : null;

做一个工厂分类,你的解决方案有什么问题?什么方式不起作用?做一个工厂分类,你的解决方案有什么问题?它以什么方式不起作用?也许
ship.DefenseType?.propulceMethod?.StartsWith(…)
就足够了?@AleksAndreev谢谢,它不会像是null一样,返回null,否则一类
战法
不是
推进法
的值。在这种情况下,我们仍然需要一个
if
来检查值是否为null,或者我们可以返回一个
BattleMethod
我得到这个错误:运算符&&不能应用于bool和bool类型的操作数?这是一个愚蠢的错误,因为&&仅适用于bool类型,如果它们不是布尔类型,您应该会得到一个错误。然而,试着把你的条件放在括号里,
(…&&&&&&&&&&&&&&&&&-/code>也许
ship.DefenseType?.PropulstMethod?.StartWith(…)
就足够了?@AleksAndreev谢谢,它不会像是null一样,返回null,否则一类
战法
不是
PropulstMethod
的值。在这种情况下,我们仍然需要一个
if
来检查值是否为null,或者我们可以返回一个
BattleMethod
我得到这个错误:运算符&&不能应用于bool和bool类型的操作数?这是一个愚蠢的错误,因为&&仅适用于bool类型,如果它们不是布尔类型,您应该会得到一个错误。但是,请尝试将条件放在括号中
(…&&&&&…)