| Bytes | Lang | Time | Link |
|---|---|---|---|
| 000 | C# | 250908T175510Z | romfir |
| 004 | C# | 250908T173517Z | romfir |
| 033 | C# | 250721T155233Z | romfir |
| 094 | C# | 120418T212018Z | Cristian |
| 085 | C# | 120426T045555Z | mizer |
| 076 | C# | 130803T090731Z | Timwi |
| 114 | C# | 120418T225602Z | mellamok |
| 115 | 115 Bytes | 120417T182509Z | primo |
C# 0 chars
using .NET 8 csproj like this: <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="HelloWorld.SourceGen" Version="1.0.0" />
</ItemGroup>
</Project>
where HelloWorld.SourceGen is previously created Nuget Package which contains Source generator like this:
using Microsoft.CodeAnalysis;
namespace Generator;
[Generator]
public class Class1 : IIncrementalGenerator
{
public void Initialize(IncrementalGeneratorInitializationContext context)
{
context.RegisterPostInitializationOutput(ctx => ctx.AddSource("Hello.g.cs", "Console.WriteLine(\"Hello World\");"));
}
}
HelloWorld.SourceGencsproj:
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<LangVersion>latest</LangVersion>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<PackageId>HelloWorld.SourceGen</PackageId>
<Version>1.0.0</Version>
<IncludeBuildOutput>false</IncludeBuildOutput>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.3">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.3.1">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<None Include="$(OutputPath)\$(AssemblyName).dll" Pack="true" PackagePath="analyzers/dotnet/cs" Visible="false" />
</ItemGroup>
</Project>
it is possible to create an empty C# program and after execution "Hello World" will be printed.
C# 4 chars
using .NET 8/9 csproj like this:<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="HelloWorldLib" Version="1.0.0" />
</ItemGroup>
<ItemGroup>
<Using Include="HelloWorldLib.C" Static="True"/>
</ItemGroup>
</Project>
where HelloWorldLib is previously created Nuget Package which contains only one class like this:
using System.Runtime.CompilerServices;
namespace HelloWorldLib;
public class C
{
public static object F;
[ModuleInitializer]
public static void M1()
{
Console.WriteLine("Hello World");
}
}
HelloWorldLib's csproj:
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
</PropertyGroup>
it is possible to create a C# program with just 4 characters:
_=F;
(A module initializer is executed at, or sometime before, first access to any static field or first invocation of any method defined in the module. link)
Note: it is probably possible to write a source generator and put it in a package that would generate Program.cs with Console.WriteLine("Hello World"), that would make a C# program 0 chars :)
C# 33 chars
using .NET 8/9 csproj like this:<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<Using Include="System.Console" Static="True"/>
</ItemGroup>
code:
if(Write("Hello, World!")is GC){}
C# 96 95 94 chars
A bit of a cheat, but works if you have IronRuby installed:
class P{static void Main(){if(IronRuby.Ruby.CreateEngine().Execute("puts'Hello World'")>1){}}}
C# 85 chars
class H{static void Main(){if(System.Console.Out.WriteAsync("Hello, world!")is H){}}}
C#, 76
class X{static void Main(){if(System.Console.Write("Hello, World!")is X){}}}
I tried this in my VS2012 and it works just fine, even though it is quite a surprise that you can apply the is operator to void...
C# (114)
class M{static void Main(){if(typeof(System.Console).GetMethods()[78].Invoke(null,new[]{"Hello, world!"})is M){}}}
Note that the proper index for Write(string)/WriteLine(string) may be different on your system. However, since there are only 106 methods total, I'm almost certain either Write(string) or WriteLine(string) will be a two-digit index number on every system, so the character count should be generally valid.
Demo: http://ideone.com/5npky (Write method is apparently index 23 here)
115 Bytes
class H{static void Main(){if(((System.Action)(()=>System.Console.Write("Hello, world!"))).DynamicInvoke()is H){}}}
It's likely possible to produce something a bit shorter, but I'm pretty sure that you're going to need make some sort of asynchronous call.