lambda表达式和条件运算符结合使用

nangongxiaobai 2019-06-03 04:40:41
这句代码哪里错了?为什么在我的VS运行时报错?

double sinc(double x) => x != 0.0 ? Math.Sin(x) / x : 1;
...全文
551 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 2019-06-05
  • 打赏
  • 举报
回复
引用 7 楼 nangongxiaobai 的回复:
[quote=引用 4 楼 正怒月神 的回复:] [quote=引用 2 楼 nangongxiaobai 的回复:] [quote=引用 1 楼 正怒月神 的回复:] double sinc(double x) 错了啊。
求大神给出正确的写法,新手,实在不懂[/quote] 我看错了,以为你在声明属性。 你如果放在vs2017或者以上版本,这个方法是对的[/quote] 是的,试了一下VS2017,不会报错,但2015会报错。[/quote] 因为这是C#7.0开始的语法,vs2015不支持,2015是C#6.0的语法
bloodish 2019-06-04
  • 打赏
  • 举报
回复
抛开VS版本的问题不说,你这X!=0.0的判断在工程上是非常忌讳的。 一般判断一个浮点数是否为0(接近于0),需要取绝对值再跟一个很小的浮点数比较

double sinc(double x) => Math.Abs(x) > 1e-6 ? Math.Sin(x) / x : 1;
是1e-6,还是更小的精度,根据自己的需求而定。
bloodish 2019-06-04
  • 打赏
  • 举报
回复
看代码,自己理解

var v = Math.Cos(Math.PI/2);
Console.WriteLine(Math.Abs(v)<1e-6);
Console.WriteLine(v == 0.0);
引用 11 楼 nangongxiaobai 的回复:
[quote=引用 10 楼 bloodish 的回复:] 抛开VS版本的问题不说,你这X!=0.0的判断在工程上是非常忌讳的。 一般判断一个浮点数是否为0(接近于0),需要取绝对值再跟一个很小的浮点数比较

double sinc(double x) => Math.Abs(x) > 1e-6 ? Math.Sin(x) / x : 1;
是1e-6,还是更小的精度,根据自己的需求而定。
为什么要不比较0,而是跟一个很小的数比较?[/quote]
nangongxiaobai 2019-06-04
  • 打赏
  • 举报
回复
引用 10 楼 bloodish 的回复:
抛开VS版本的问题不说,你这X!=0.0的判断在工程上是非常忌讳的。 一般判断一个浮点数是否为0(接近于0),需要取绝对值再跟一个很小的浮点数比较

double sinc(double x) => Math.Abs(x) > 1e-6 ? Math.Sin(x) / x : 1;
是1e-6,还是更小的精度,根据自己的需求而定。
为什么要不比较0,而是跟一个很小的数比较?
nangongxiaobai 2019-06-03
  • 打赏
  • 举报
回复
引用 5 楼 wanghui0380 的回复:
这个只是一个语法糖 double sinc(double x) { return x != 0.0 ? Math.Sin(x) / x : 1; } 语义上没问题的。 建议,你把全部代码贴出来看看
是的,没有问题,是VS版本引起的报错。
nangongxiaobai 2019-06-03
  • 打赏
  • 举报
回复
引用 3 楼 wanghui0380 的回复:
很遗憾的告诉你,我没看出那里错误。所以用vs跑了一下,完全没有问题。 所以帮不了你。
谢谢,跟VS版本有关
nangongxiaobai 2019-06-03
  • 打赏
  • 举报
回复
引用 4 楼 正怒月神 的回复:
[quote=引用 2 楼 nangongxiaobai 的回复:] [quote=引用 1 楼 正怒月神 的回复:] double sinc(double x) 错了啊。
求大神给出正确的写法,新手,实在不懂[/quote] 我看错了,以为你在声明属性。 你如果放在vs2017或者以上版本,这个方法是对的[/quote] 是的,试了一下VS2017,不会报错,但2015会报错。
wangmoxhn 2019-06-03
  • 打赏
  • 举报
回复
你应该是传入了0 浮点数对!=0这种逻辑比较不准确,最好不要这么写。可以分开成>0 <0来写
wanghui0380 2019-06-03
  • 打赏
  • 举报
回复
这个只是一个语法糖 double sinc(double x) { return x != 0.0 ? Math.Sin(x) / x : 1; } 语义上没问题的。 建议,你把全部代码贴出来看看
正怒月神 2019-06-03
  • 打赏
  • 举报
回复
引用 2 楼 nangongxiaobai 的回复:
[quote=引用 1 楼 正怒月神 的回复:] double sinc(double x) 错了啊。
求大神给出正确的写法,新手,实在不懂[/quote] 我看错了,以为你在声明属性。 你如果放在vs2017或者以上版本,这个方法是对的
wanghui0380 2019-06-03
  • 打赏
  • 举报
回复
很遗憾的告诉你,我没看出那里错误。所以用vs跑了一下,完全没有问题。 所以帮不了你。
nangongxiaobai 2019-06-03
  • 打赏
  • 举报
回复
引用 1 楼 正怒月神 的回复:
double sinc(double x) 错了啊。
求大神给出正确的写法,新手,实在不懂
正怒月神 2019-06-03
  • 打赏
  • 举报
回复
double sinc(double x) 错了啊。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧