Named placeholder string interpolation from objects and dictionaries with formatting and defaults.
dotnet add package Philiprehberger.StringTemplateNamed placeholder string interpolation from objects and dictionaries with formatting and defaults.
dotnet add package Philiprehberger.StringTemplate
using Philiprehberger.StringTemplate;
var result = Template.Render("Hello, {name}!", new { name = "World" });
// "Hello, World!"
using Philiprehberger.StringTemplate;
var user = new { FirstName = "Alice", LastName = "Smith" };
var result = Template.Render("Welcome, {FirstName} {LastName}!", user);
// "Welcome, Alice Smith!"
using Philiprehberger.StringTemplate;
var values = new Dictionary<string, object?>
{
["product"] = "Widget",
["quantity"] = 5
};
var result = Template.Render("Order: {quantity}x {product}", values);
// "Order: 5x Widget"
using Philiprehberger.StringTemplate;
var data = new { price = 19.99m, date = new DateTime(2026, 3, 21) };
var result = Template.Render("Price: {price:C2}, Date: {date:yyyy-MM-dd}", data);
// "Price: $19.99, Date: 2026-03-21"
using Philiprehberger.StringTemplate;
Template.HasPlaceholders("Hello, {name}!"); // true
Template.HasPlaceholders("No placeholders here"); // false
Template.HasPlaceholders("Escaped {{braces}}"); // false
using Philiprehberger.StringTemplate;
var names = Template.ExtractPlaceholders("Hello, {name}! You have {count} items.");
// ["name", "count"]
var formatted = Template.ExtractPlaceholders("{price:C2} on {date:yyyy-MM-dd}");
// ["price", "date"]
Template| Method | Description |
|---|---|
Render(template, values) | Replace placeholders using an object's public properties |
Render(template, values) | Replace placeholders using a dictionary |
Render(template, values, options) | Replace placeholders with custom missing-key behavior |
HasPlaceholders(template) | Returns true if the template contains any {name} placeholders |
ExtractPlaceholders(template) | Returns a string[] of distinct placeholder names in order of appearance |
TemplateOptions| Property | Type | Default | Description |
|---|---|---|---|
MissingKeyBehavior | string | "Throw" | How to handle missing keys: "Throw", "Empty", or "LeaveTemplate" |
DefaultValue | string | "" | Fallback value when MissingKeyBehavior is "Empty" |
dotnet build src/Philiprehberger.StringTemplate.csproj --configuration Release
If you find this project useful: