Side-by-side, interactive cheatsheets for C# programmers
comparing C# to other languages. Every example runs live in your browser — no
setup, no installation.
Choose your own path by reordering languages
What C# developers reach for when they want expressiveness over ceremony. Ruby drops static, explicit types, and boilerplate for a world where everything is an object, blocks replace delegates, and open classes let you add methods to Integer at runtime.
map, select, reduce, &:upcase replace LINQ's Select/Where/Aggregate without the lambda verbosity42.times, nil.nil?, true.class all work; no primitive/boxing distinctionString, Integer, or any class and add methods at runtime; no extension-method limitationinclude Comparable or Enumerable to gain 50+ methods for free, replacing C# interface boilerplateunless — puts value if valid? reads like plain English; no one-line if (cond) stmt; neededDemanding but deeply rewarding, Rust proves memory safety and bare-metal speed aren't in opposition.
The English-readable .NET language that pioneered RAD — with static typing, LINQ, and the full .NET ecosystem.
If...Then...End If, For Each...NextAndAlso / OrElse short-circuit logic vs And / OrNothing for nil, Me for self, MyBase for superGodot's built-in scripting language — Python-flavored, dynamically typed, no compilation step, and designed around Godot's Node tree. C# developers often use GDScript for rapid prototyping and C# for performance-critical systems within the same Godot project.
var x = 42 is a Variant; opt-in type annotations with var x: int = 42match replaces switch — matches ranges, arrays, dicts, and bind-patterns; far more powerful than C# switchsignal health_changed(new_health) is the observer pattern baked into the engine; no delegates requiredvar double = func(x): return x * 2 is explicit; invoke with double.call(5) rather than direct application:= for typed inference — var count := 42 infers int; without := the variable is untyped Variant