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

字符串插值变量问题:Class A静态常量如何使用Class B的currentSet?

可行的替代解决方案

当然有不少方法能解决这个问题,既不用把SetScore移到Class B,也不用在Class B里显式调用String.Format。这里给你几个实用的思路:


1. 将SetScore改为静态方法,接收currentSet作为参数

这是最直观且符合单一职责原则的方案。把原来的插值字符串逻辑封装到Class A的静态方法里,Class B调用时传入它持有的currentSet值即可:

// Class A
public static class ClassA
{
    // 用方法替代原来的常量,动态接收参数
    public static string GetSetScore(string currentSet)
    {
        return $"Score[@Set='{currentSet}']";
    }
}

// Class B 中的调用示例
public class ClassB
{
    public void SomeMethod()
    {
        string currentSet = "Set1"; // 你已知的currentSet值
        string scorePath = ClassA.GetSetScore(currentSet);
        // 使用scorePath做后续操作
    }
}

这样Class A只负责维护字符串的模板结构,不需要知晓currentSet的来源,完美保持了它作为字符串常量/模板容器的定位。


2. 定义带自定义占位符的模板常量,用字符串替换填充

如果你更倾向于保留"常量"的形式,可以在Class A里定义一个带唯一占位符的模板,然后在Class B里用字符串替换来填充currentSet:

// Class A
public static class ClassA
{
    public const string SetScoreTemplate = "Score[@Set='{{CURRENT_SET}}']";
    // 注意这里用双大括号转义,避免和String.Format的占位符混淆
}

// Class B 中的调用示例
public class ClassB
{
    public void SomeMethod()
    {
        string currentSet = "Set1";
        string scorePath = ClassA.SetScoreTemplate.Replace("{CURRENT_SET}", currentSet);
    }
}

这个方案不用写方法,纯字符串操作就能完成,适合简单的单参数场景。不过要注意占位符的唯一性,避免出现意外替换的情况。


3. 进阶:利用委托或自定义模板解析器(适合复杂场景)

如果以后需要扩展更多参数,或者想要更灵活的模板逻辑,可以考虑在Class A里定义一个委托类型,或者写一个简单的模板解析器。不过这个方案相对复杂,一般简单场景下前面两个就足够用了。

补充说明:其实C#的字符串插值$""本质上编译后会转换成String.Format调用,但如果你的顾虑是不在Class B里显式写String.Format,那方案1里的插值是封装在Class A内部的,完全符合你的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:17:42