展开全部
using System;
class RootOfSquare
{
static (double x1, double x2)? Roots(double a, double b, double c)
{
double delta = b * b - 4 * a * c;
if (delta < 0)
return null;
else
return ((-b + Math.Sqrt(delta)) / (2 * a), (-b - Math.Sqrt(delta)) / (2 * a));
}
static void Main()
{
var result = Roots(1, -4, 3);
if (result != null)
Console.WriteLine($"{result.Value.x1} {result.Value.x2}");
}
}
其实我不懂为什么不能用一个三元表达式解决,即使改成true?null:null也会报error。
static (double x1, double x2)? Roots(double a, double b, double c)
=> b * b - 4 * a * c is double delta && delta < 0 ?
null : ((-b + Math.Sqrt(delta)) / (2 * a), (-b - Math.Sqrt(delta)) / (2 * a));
// Type of conditional expression cannot be determined because there is no implicit conversion between '<null>' and '(double, double)' (CS0173) [dotnet]
---
好了,三元表达式需要返回相同的类型,null不能转换成null,也不能转换成(double,double),所以即使它们分别都可以转换成可空类型也不行。
解决方法是自己手动创建一个为null的可空类型:
static (double x1, double x2)? Roots(double a, double b, double c)
=> b * b - 4 * a * c is double delta && delta < 0 ?
new Nullable<(double, double)>() : ((-b + Math.Sqrt(delta)) / (2 * a), (-b - Math.Sqrt(delta)) / (2 * a));
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |