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

咨询CS9230错误的解决方案:如何让使用string.Create结合动态插值字符串的代码正常运行

咨询CS9230错误的解决方案:如何让使用string.Create结合动态插值字符串的代码正常运行

嘿,我来帮你搞定这个头疼的CS9230错误!先还原下你遇到的场景:

你写了这样的代码,结果直接抛出错误:

dynamic d = "foo";
var s = string.Create(null, $"{d}");

错误提示:CS9230: Cannot perform a dynamic invocation on an expression with type 'DefaultInterpolatedStringHandler'

但换成StringBuilder的Append方法却能正常编译运行:

dynamic d = "foo";
var sb = new StringBuilder();
sb.Append($"{d}");

你已经抓到了问题的核心差异——AppendInterpolatedStringHandler不是ref struct,而string.Create依赖的DefaultInterpolatedStringHandler是个ref struct。C#里的动态调用(也就是搭配dynamic变量使用时)并不支持ref struct类型,这就是编译器报错的根本原因。

给你两个简单可行的解决办法:

  • 方案一:显式转换动态变量为非动态类型
    只需要在插值时把d转换成object或者具体类型,就能让插值逻辑以常规方式处理,避开ref struct的动态调用限制:

    dynamic d = "foo";
    var s = string.Create(null, $"{(object)d}");
    
  • 方案二:提前解析动态变量为具体类型
    如果你的业务场景允许,先把动态变量转成明确的string类型再使用,代码会更直观易懂:

    dynamic d = "foo";
    string dStr = d;
    var s = string.Create(null, $"{dStr}");
    

这两种方式都能让你的string.Create结合插值字符串的代码正常运行,再也不会触发CS9230错误啦!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 12:59:32