Files
nt8-sdk/.kilocode/rules/csharp_50_syntax.md
mo fb4f5d3bde
Some checks failed
Build and Test / build (push) Has been cancelled
chore: Add project configuration and documentation
- Kilocode AI agent rules and guidelines
- Setup and implementation guides
- Architecture documentation
- Build and verification references
2026-02-15 14:59:36 -05:00

2.2 KiB

C# 5.0 Syntax Requirements

You are working on a .NET Framework 4.8 project that MUST use C# 5.0 syntax only.

Forbidden C# 6+ Features

String Interpolation (C# 6)

NEVER use: $"Order {orderId} at {price}" ALWAYS use: string.Format("Order {0} at {1}", orderId, price)

Null-Conditional Operators (C# 6)

NEVER use: var name = order?.Name NEVER use: var value = dict?[key] ALWAYS use explicit null checks:

var name = order != null ? order.Name : null;
if (dict != null && dict.ContainsKey(key)) { }

Null-Coalescing Assignment (C# 8)

NEVER use: value ??= defaultValue; ALWAYS use: if (value == null) value = defaultValue;

Expression-Bodied Members (C# 6)

NEVER use: public int Property => value; NEVER use: public void Method() => DoSomething(); ALWAYS use full syntax:

public int Property 
{ 
    get { return value; } 
}

public void Method()
{
    DoSomething();
}

nameof Operator (C# 6)

NEVER use: throw new ArgumentNullException(nameof(param)); ALWAYS use: throw new ArgumentNullException("param");

Auto-Property Initializers (C# 6)

NEVER use: public int Property { get; set; } = 10; ALWAYS use constructor initialization:

public int Property { get; set; }

public ClassName()
{
    Property = 10;
}

Using Static (C# 6)

NEVER use: using static System.Math; ALWAYS use: System.Math.Floor(...)

Tuple Syntax (C# 7)

NEVER use: var tuple = (name: "test", value: 1); ALWAYS use: Tuple<string, int> or custom classes

Pattern Matching (C# 7+)

NEVER use: if (obj is string str) ALWAYS use: if (obj is string) { var str = (string)obj; }

Local Functions (C# 7)

NEVER use functions inside methods ALWAYS use private methods

Out Variables (C# 7)

NEVER use: if (dict.TryGetValue(key, out var value)) ALWAYS use:

OrderStatus value;
if (dict.TryGetValue(key, out value))
{
    // Use value
}

Verification

After writing ANY code, verify C# 5.0 compliance:

  • No $ signs except in string literals
  • No ?. or ?[ operators
  • No => except in lambda expressions
  • No inline variable declarations in out parameters