【发布时间】:2017-02-14 16:48:42
【问题描述】:
编辑:最初,这篇文章的示例处理的是哈希码,所以您会看到一些 cmets 使用 param.GetHashCode(),而不是 (1+param)。为了更深入地了解这一点,我更改了函数来计算某个数字的绝对值加一。
假设我想创建一个计算某个整数的绝对值的函数(不使用 Math.Abs)。我可以写类似的东西:
int absoluteValueOfOnePlus(int param)
{
int onePlusParam= 1 + param;
return ((onePlusParam> 0) ? (onePlusParam) : (-onePlusParam) );
}
我希望将 onePlusParm 的范围限制在三元语句内——类似于:
int absoluteValueOfOnePlus(intparam)
{
return (((int onePlusParam = 1 + param) > 0) ? (onePlusParam) : (-onePlusParam) );
}
我知道这不是有效的 C#,但它证明了我正在尝试执行的一个很好的示例 - 创建一些仅存在于三元运算符范围内的变量。
【问题讨论】:
-
“我希望将此方法压缩到一行”。你能解释一下为什么需要这样做吗?
-
你可以做到
int i; return i = param.GetHashCode() > 0 ? i : -i;...我不会,但你可以。 -
@openshac,它更多的是关于限制范围而不是其他任何东西。如果函数更大,我将存在于函数的其余部分。在三元语句中使用声明会将范围限制在三元语句内——语句完成后,将删除 i。
-
@MatthewWhited,也好不到哪里去。我的目标是限制 i 的范围。将计算移到三元语句中仍然使 i 在函数范围内,而不是三元语句。
-
您可以使用
{ ... }创建一个范围块。块内的任何内容都将超出块外的范围。
标签: c# ternary-operator