C#中的Hello World不带分号

C#中的Hello World不带分号,c#,console,C#,Console,是否可以像在C中那样编写Hello World,而不使用分号 在C中: if(printf("Hello World!")) //prints Hello World { } 在C#中: 扩展SwDevMan81的答案: static void Main(string[] args) { if (MessageBox.Show("Hello World!") is System.Windows.Forms.DialogResult)

是否可以像在
C
中那样编写
Hello World
,而不使用分号

C
中:

  if(printf("Hello World!"))  //prints Hello World
  { 
  }
C#
中:


扩展SwDevMan81的答案:

    static void Main(string[] args)
    {
        if (MessageBox.Show("Hello World!") is System.Windows.Forms.DialogResult)
        {
        }
    }

扩展SwDevMan81的答案:

    static void Main(string[] args)
    {
        if (MessageBox.Show("Hello World!") is System.Windows.Forms.DialogResult)
        {
        }
    }
像这样:

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) { }
    }
}
像这样:

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) { }
    }
}

诀窍是以某种方式从返回void的内容构造表达式。幸运的是BeginInvoke做到了这一点。现在我们需要防止程序在BeginInvoke编写文本之前终止。最初我只是使用了一个循环,但是SLaks显示我们可以使用
.AsyncWaitHandle.WaitOne()
,因为它返回一个
bool

将其放入
Main
功能:

if(((System.Action<string>)System.Console.WriteLine).BeginInvoke("Hello world",null,null).AsyncWaitHandle.WaitOne())
{
}
if(((System.Action)System.Console.WriteLine).BeginInvoke(“Hello world”,null,null).AsyncWaitHandle.WaitOne())
{
}

诀窍在于以某种方式从返回void的内容构造表达式。幸运的是BeginInvoke做到了这一点。现在我们需要防止程序在BeginInvoke编写文本之前终止。最初我只是使用了一个循环,但是SLaks显示我们可以使用
.AsyncWaitHandle.WaitOne()
,因为它返回一个
bool

将其放入
Main
功能:

if(((System.Action<string>)System.Console.WriteLine).BeginInvoke("Hello world",null,null).AsyncWaitHandle.WaitOne())
{
}
if(((System.Action)System.Console.WriteLine).BeginInvoke(“Hello world”,null,null).AsyncWaitHandle.WaitOne())
{
}
现有答案要么使用与控制台不同的输出方法。WriteLine
不返回
void
,要么使用
Begin*
技巧从
void
方法中获取非
void
表达式。这里的技巧是,
的左手参数是
被允许是一个
void
表达式。编译器可能会警告“表达式永远不是给定的类型”,但代码是合法的



现有答案要么使用与控制台不同的输出方法。WriteLine不返回
void
,要么使用
Begin*
技巧从
void
方法中获取非
void
表达式。这里的技巧是,
的左手参数是
被允许是一个
void
表达式。编译器可能会警告“表达式永远不是给定的类型”,但代码是合法的。

不,即使你可以,谁在乎呢?我不知道“VIVA”是什么,但如果有人让我这么做,我想我会退出。祝你在找工作时好运;外面很艰难。在这个问题上的否决票似乎有点苛刻。@Banang记住,这是一个问答网站,旨在帮助人们。并非每个问题都需要帮助整个社区。试着少一点苛刻。这是一个有趣的挑战,没有比在这里如此流行的代码高尔夫线程更毫无意义。不,即使你可以,谁在乎呢?我不知道什么是“万岁”,但如果有人让我这么做,我想我会退出。祝你在找工作时好运;外面很艰难。在这个问题上的否决票似乎有点苛刻。@Banang记住,这是一个问答网站,旨在帮助人们。并非每个问题都需要帮助整个社区。试着少一点苛刻。这是一个有趣的挑战,和这里流行的代码高尔夫线程一样毫无意义。但是,这不会写入控制台。但是,这不会写入控制台。非常非常好!;-)这是迄今为止我最喜欢的代码片段+1用于
.AsyncWaitHandle.WaitOne()
。但在林帕德对我不起作用。它要么在写之前终止,要么根本不终止。@Daniel:这很有效;我试过了@代码:在控制台项目中尝试它。是的,它现在可以使用您刚才添加的Console.ReadKey(),因为这样会刷新控制台。通过将flush调用作为异步操作的回调传递,您可以在一条语句中完成这一切:
。。。0,12,a=>Console.ReadKey(),null)
我发现它也不适用于您的字节数组,这很奇怪。我必须把Encoding.UTF8.GetBytes(“Hello World!”)放得非常好!;-)这是迄今为止我最喜欢的代码片段+1用于
.AsyncWaitHandle.WaitOne()
。但在林帕德对我不起作用。它要么在写之前终止,要么根本不终止。@Daniel:这很有效;我试过了@代码:在控制台项目中尝试它。是的,它现在可以使用您刚才添加的Console.ReadKey(),因为这样会刷新控制台。通过将flush调用作为异步操作的回调传递,您可以在一条语句中完成这一切:
。。。0,12,a=>Console.ReadKey(),null)
我发现它也不适用于您的字节数组,这很奇怪。我必须将Encoding.UTF8.GetBytes(“Hello World!”)替换为SLaks答案中的AsyncWaitHandle.WaitOne的无止境循环。在控制台应用程序中尝试了这一点-它需要使用系统
以便工作(SLaks的答案不起作用)。答案很好,因为我在LinqPad中测试,
使用系统是隐式的。从SLaks的答案中用AsyncWaitHandle.WaitOne替换了无休止的循环。在控制台应用程序中尝试了这一点-它需要使用系统
以便工作(SLaks的答案不起作用)。答案很好,因为我在LinqPad中测试,
使用系统是隐式的。