【发布时间】:2018-12-20 16:56:16
【问题描述】:
我为 FizzBuzz 测试找到了这个 codegolf 答案,经过一番检查后,我意识到我不知道它实际上是如何工作的,所以我开始调查:
for(int i=1; i<101;i++)
System.Console.Write($"{(i%3*i%5<1?0:i):#}{i%3:;;Fizz}{i%5:;;Buzz}\n");
我把它放入 dotnetfiddle 并建立了第一部分的工作如下:
{(BOOL?0:i):#}
当 BOOL 为真时,条件表达式返回 0,否则返回数字。
但是除非是<> 0,否则不会返回该号码。我猜这是:# 字符的工作。我找不到关于 :# 字符工作的任何文档。谁能解释冒号/哈希或指出正确的方向吗?
第二部分:
{VALUE:;;Fizz}
当VALUE = 0 时,不会打印任何内容。我假设这是由第一个 ; 字符 [结束语句] 确定的。第二个; 字符确定'如果VALUE <> 0 然后打印我之后的内容。'
再一次,有没有人有关于在字符串插值中使用 分号 的文档,因为我找不到任何有用的东西。
【问题讨论】:
-
what other 'advanced' functionality exists in string interpolation that I may not be aware of?太宽泛了,您应该删除它 -
冒号
:后面的任何内容都只是一个普通的老式简单格式字符串 (docs.microsoft.com/en-us/dotnet/standard/base-types/…)。 (当然不包括三元 inline-if 运算符condition ? exprA : exprB的冒号) -
@elgonzo - 就是这样,但没有?在第一部分或第二部分的冒号前标记。
-
对于您的
;;,请参阅String Formatting
标签: c# syntax string-interpolation