Derniers tips / Mémos
C# 15 : union types & closed hierarchies
Modélise nativement « exactement l'un de ces types », avec un switch exhaustif vérifié par le compilateur.
.NET 11 : runtime async
Fin des state machines générées par le compilateur : moins d'allocations et des stack traces enfin lisibles.
EF Core 11 : recherche vectorielle
Recherche sémantique directement dans SQL Server 2025, sans base vectorielle séparée, en LINQ typé.
Avalonia UI
Framework UI cross-platform pour .NET : Windows, macOS, Linux, iOS, Android et WebAssembly.
API Zip Async .NET 10
Découvrez les nouvelles APIs asynchrones pour la compression ZIP et les améliorations de performance dans .NET 10
DiffPlex : génération de diffs textuels pour .NET
Bibliothèque .NET pour comparer des textes et produire des diffs en modes inline, côte-à-côte (side-by-side) ou unifiés (unidiff).
Démarrage rapide (inline)
using DiffPlex.DiffBuilder;
using DiffPlex.DiffBuilder.Model;
var diff = InlineDiffBuilder.Diff(before, after);
foreach (var line in diff.Lines)
{
switch (line.Type)
{
case ChangeType.Inserted:
Console.Write("+ " );
break;
case ChangeType.Deleted:
Console.Write("- " );
break;
default:
Console.Write(" " );
break;
}
Console.WriteLine(line.Text);
}Vue côte-à-côte (SideBySide)
using DiffPlex;
using DiffPlex.DiffBuilder;
using DiffPlex.DiffBuilder.Model;
var differ = new SideBySideDiffBuilder(new Differ());
SideBySideDiffModel model = differ.BuildDiffModel(oldText, newText);
// model.OldText.Lines / model.NewText.Lines contiennent les lignes alignées
// Chaque ligne a un ChangeType (Unchanged, Inserted, Deleted, Imaginary, Modified)Rendu unifié (Unidiff)
using DiffPlex;
using DiffPlex.DiffBuilder;
using DiffPlex.DiffBuilder.Model;
using DiffPlex.Chunkers;
using DiffPlex.Unidiff;
string text1 = oldText;
string text2 = newText;
// simple
string uni = UnidiffRenderer.GenerateUnidiff(text1, text2, "before.txt", "after.txt");
// avec options (contexte, ignore case/espace, chunker)
var renderer = new UnidiffRenderer(contextLines: 3);
string uni2 = renderer.Generate(text1, text2, "before.txt", "after.txt");Diff/Merge à trois voies
using DiffPlex;
using DiffPlex.Chunkers;
var threeWay = new ThreeWayDiffer();
var diff = threeWay.CreateDiffs(baseText, oldText, newText,
ignoreWhiteSpace: false, ignoreCase: false, new LineChunker());
var merge = threeWay.CreateMerge(baseText, oldText, newText,
ignoreWhiteSpace: false, ignoreCase: false, new LineChunker());
if (merge.HasConflicts)
{
Console.WriteLine($"Conflits: {merge.ConflictBlocks.Count}");
}
else
{
Console.WriteLine(merge.MergedText);
}Options utiles
- ignoreWhitespace / ignoreWhiteSpace : ignorer les espaces
- ignoreCase : comparer sans tenir compte de la casse
- Chunkers (LineChunker, WordChunker, CharacterChunker) : granularité
- Models: DiffPaneModel (inline), SideBySideDiffModel (côte‑à‑côte)
Sources : DiffPlex (GitHub) • NuGet DiffPlex
Écrit le 2025-09-09