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

如何为string.Format的参数索引提供对应取值提示?

如何让string.Format占位符的参数对应关系更清晰?

针对你遇到的问题,这里有几种实用方案,能让使用者明确知晓每个占位符对应的参数要求:

1. 给常量添加详细XML注释

直接在常量上方添加XML注释,明确标注每个索引占位符对应的参数含义,主流IDE(如Visual Studio)会在使用者引用该常量时自动显示提示信息。

/// <summary>
/// 获取AgentGroup的SOAP请求模板
/// 占位符说明:
/// {0} - 会话ID(sessionId)
/// {1} - 代理ID(agentId)
/// </summary>
public readonly static string GetAgentGroupById = @"<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:urn='urn:UMARKETSCWS' xmlns:std='http://www.utiba.com/delirium/ws/StdQuery' xmlns:misc='http://www.utiba.com/delirium/ws/Misc'>
                                             <soapenv:Header/>
                                             <soapenv:Body>
                                                <urn:getAgentGroupByAgentID>
                                                   <urn:getAgentGroupByAgentIDRequest>
                                                      <std:sessionid>{0}</std:sessionid>
                                                      <urn:agentID>{1}</urn:agentID>
                                                   </urn:getAgentGroupByAgentIDRequest>
                                                </urn:getAgentGroupByAgentID>
                                             </soapenv:Body>
                                          </soapenv:Envelope>";

使用者调用string.Format时,鼠标悬停在GetAgentGroupById上就能看到占位符的对应说明。

2. 封装为带明确参数的静态方法

把字符串格式化逻辑封装成静态方法,用有意义的参数名代替索引,使用者调用时只需传入对应命名的参数,完全不用关心占位符索引。

public static class SoapConstants
{
    private readonly static string GetAgentGroupByIdTemplate = @"<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:urn='urn:UMARKETSCWS' xmlns:std='http://www.utiba.com/delirium/ws/StdQuery' xmlns:misc='http://www.utiba.com/delirium/ws/Misc'>
                                             <soapenv:Header/>
                                             <soapenv:Body>
                                                <urn:getAgentGroupByAgentID>
                                                   <urn:getAgentGroupByAgentIDRequest>
                                                      <std:sessionid>{0}</std:sessionid>
                                                      <urn:agentID>{1}</urn:agentID>
                                                   </urn:getAgentGroupByAgentIDRequest>
                                                </urn:getAgentGroupByAgentID>
                                             </soapenv:Body>
                                          </soapenv:Envelope>";

    /// <summary>
    /// 获取填充好参数的AgentGroup查询SOAP请求
    /// </summary>
    /// <param name="sessionId">会话ID</param>
    /// <param name="agentId">代理ID</param>
    /// <returns>格式化后的SOAP XML字符串</returns>
    public static string GetAgentGroupById(string sessionId, string agentId)
    {
        return string.Format(GetAgentGroupByIdTemplate, sessionId, agentId);
    }
}

调用时直接使用:

var soapRequest = SoapConstants.GetAgentGroupById(request.sessionId, request.agentId);

这种方式最直观,使用者不用记忆任何占位符索引,看方法参数就能明确该传什么。

3. 使用具名占位符(C# 6+)

如果使用C# 6及以上版本,可以把模板字符串改成具名占位符,配合匿名类型或字典传参,让占位符和参数名一一对应。

public readonly static string GetAgentGroupById = @"<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:urn='urn:UMARKETSCWS' xmlns:std='http://www.utiba.com/delirium/ws/StdQuery' xmlns:misc='http://www.utiba.com/delirium/ws/Misc'>
                                             <soapenv:Header/>
                                             <soapenv:Body>
                                                <urn:getAgentGroupByAgentID>
                                                   <urn:getAgentGroupByAgentIDRequest>
                                                      <std:sessionid>{sessionId}</std:sessionid>
                                                      <urn:agentID>{agentId}</urn:agentID>
                                                   </urn:getAgentGroupByAgentIDRequest>
                                                </urn:getAgentGroupByAgentID>
                                             </soapenv:Body>
                                          </soapenv:Envelope>";

调用时用匿名类型配合string.Format:

var soapRequest = string.Format(GetAgentGroupById, new { sessionId = request.sessionId, agentId = request.agentId });

也可以自定义扩展方法简化具名占位符的替换逻辑,让调用更简洁。

4. 结合代码文档工具生成说明

如果项目使用Sandcastle、DocFX这类文档生成工具,上面的XML注释会被自动生成到项目文档中,使用者可以通过文档快速查阅占位符的对应关系。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:00:37