【问题标题】:C# - const string dictionaryC# - 常量字符串字典
【发布时间】:2016-12-05 12:38:42
【问题描述】:

在我使用的信息系统(SAP Business One)中,每个文档都表示在一个 SQL 表中。

例如:

客户订单文件:ORDR

发票文件:OINV

采购报价:OPRQ

等等……

当用户单击其中一个按钮时,我需要使用现有函数来检查 SQL 表的一部分,并检查该客户端是否在系统中有文档。 该函数返回一个字符串消息,其中包含代表此客户端在系统中的文档的表的名称。

我需要编写一个函数,将表格名称替换为文档名称。

示例:

"Client with ID:5634 has documents: OINV, ORDR"

需要替换为

 "Client with ID:5634 has documents: Invoice, Client order"

我猜应该使用字符串字典。怎么做?

谢谢

【问题讨论】:

  • 是否需要在不重新编译的情况下进行自定义?
  • 您是否确实有需要替换的文本,或者您是否正在生成“ID:5634 的客户有文档:OINV,ORDR”?

标签: c#


【解决方案1】:

理想情况下,您不应该用生成的字符串进行字符串替换 - 而是从翻译后的字符串中生成它。例如——在不知道你实际得到什么代码的情况下——你可以拥有:

private static readonly Dictionary<string, string> TableNameTranslations
    = new Dictionary<string, string>
{
    { "ORDR", "Client order document" },
    { "OINV", "Invoice document" },
    { "OPRQ", "Purchase quotation" }
};

...

public string GetClientDocumentDisplayString(int clientId)
{
    var tableNames = GetTableNamesForClient(clientId);
    var translatedNames = tableNames.Select(t => TableNameTranslations[t]);
    return $"Client with ID:{clientId} has documents: {string.Join(",", translatedNames)}";
}

private IList<string> GetTableNamesForClient(int clientId)
{
    // Whatever your code needs, returning ORDR, OINV etc
}

【讨论】:

    【解决方案2】:

    使用字典和 Linq:

    var databases = new Dictionary<string, string>();
    
    databases["OINV"] = "Invoice";
    databases["OPRQ"] = "Purchase Quotation";
    databases["ORDR"] = "Order";
    // ...
    
    var str = "Some random text ORDR more text ORDR text OPRQ text OINV text ORDR";
    
    var newstr = databases.Aggregate(str, (current, value) => 
      current.Replace(value.Key, value.Value));
    

    创建字典后也可以使用后者:

    var str2 = new StringBuilder(str);
    
    foreach (var pair in databases) {
        str2.Replace(pair.Key, pair.Value);
    }
    
    var newstr = str2.ToString();
    

    【讨论】:

      猜你喜欢
      • 2020-05-01
      • 2015-09-17
      • 2012-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 2016-03-04
      相关资源
      最近更新 更多