是否可以在没有分号Hello World
的{{1}}中写C
?
在;
:
C
在 if(printf("Hello World!")) //prints Hello World
{
}
:
C#
答案 0 :(得分:17)
诀窍是以某种方式从返回void的东西构造表达式。幸运的是,BeginInvoke正是这样做的。现在我们需要在BeginInvoke写入文本之前阻止程序终止。最初我只使用了一个循环,但是由于SLaks显示我们可以使用.AsyncWaitHandle.WaitOne()
代替,因为它返回bool
。
将其放入Main
函数:
if(((System.Action<string>)System.Console.WriteLine).BeginInvoke("Hello world",null,null).AsyncWaitHandle.WaitOne())
{
}
答案 1 :(得分:9)
if (MessageBox.Show("Hello World") == System.Windows.Forms.DialogResult.Yes)
{
}
答案 2 :(得分:6)
像这样:
class Program {
static void Main(string[] args) {
if (System.Console.OpenStandardOutput()
.BeginWrite(new byte[] { 072, 101, 108, 108, 111, 032, 087, 111, 114, 108, 100, 033 },
0, 12, null, null)
.AsyncWaitHandle.WaitOne()) { }
if (System.Console.ReadKey().Modifiers == 0) { }
}
}
答案 3 :(得分:3)
public static void Main()
{
if (System.Console.WriteLine("Hello, World!") is object)
{
}
}
现有答案使用的输出方法与Console.WriteLine
不同的输出方法不会返回void
,或使用Begin*
技巧获取非void
表达式一个void
方法。这里的技巧是允许is
的左手参数为void
表达式。编译器可能会警告&#34;表达式永远不是给定类型的#34;,但代码是合法的。
答案 4 :(得分:1)
扩展SwDevMan81的答案:
static void Main(string[] args)
{
if (MessageBox.Show("Hello World!") is System.Windows.Forms.DialogResult)
{
}
}