You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# 11插值字符串中除switch外还可嵌入哪些代码?

C# 11插值字符串中可嵌入的代码类型

首先明确核心规则:插值字符串的{ }内部只能容纳表达式(有明确返回值的代码片段),不能容纳语句(无返回值的执行逻辑,比如if语句就属于这类)。除switch表达式外,以下几类表达式都可以正常使用:

1. 三元运算符表达式

这是替代if-else逻辑最常用的方案,本身属于表达式,自带返回值:

string pageTitle = "";
string header = $"Header: {pageTitle == "" ? "No title" : pageTitle}";

C# 11支持换行提升可读性,写法如下:

string header = $"Header: {
    pageTitle == "" 
        ? "No title" 
        : pageTitle
}";

2. 方法调用表达式

直接调用返回字符串(或可隐式转换为字符串)的方法:

string GetHeaderTitle(string title) => string.IsNullOrEmpty(title) ? "No title" : title;

string pageTitle = "";
string header = $"Header: {GetHeaderTitle(pageTitle)}";

同样支持换行排版:

string header = $"Header: {
    GetHeaderTitle(pageTitle)
}";

3. 空合并与空条件表达式

针对空值场景的简洁表达式:

string pageTitle = null;
// 空合并运算符处理空值
string header = $"Header: {pageTitle ?? "No title"}";
// 结合空条件运算符处理带空值的复杂场景
string header = $"Header: {pageTitle?.Trim() ?? "No title"}";

4. 算术/逻辑表达式

只要最终结果能转换为字符串,这类基础表达式都可以嵌入:

int count = 0;
string status = $"Item count: {count == 0 ? "Empty" : count.ToString()}";
// 直接嵌入算术运算
string total = $"Total: {100 + 200}";

5. 带返回值的Lambda表达式

虽然可读性较差,但符合表达式规则的Lambda也可以使用:

string pageTitle = "";
string header = $"Header: {((Func<string>)(() => pageTitle == "" ? "No title" : pageTitle))()}";

为什么if语句会报错?

if是语句,它仅执行逻辑分支但没有返回值,而插值字符串要求{ }内的代码必须返回一个可转换为字符串的值。switch表达式是C# 8引入的表达式类型,有明确的返回值,因此能正常嵌入。


内容的提问来源于stack exchange,提问作者DeborahK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 14:25:17