2016-07-31 165 views
3

在我使用的信息系统(SAP Business One)中,每个文档都在SQL表中表示。C# - 常量字符串字典

例如:

客户订单文档:ORDR

发票凭证:OINV

采购报价单:OPRQ

等等

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

我需要编写一个函数来替换表名与文档名称。

eample:

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

需要被替换

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

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

感谢

+0

的可能的复制[C#字符串替换字典(http://stackoverflow.com/questions/1231768/c-sharp -string-replace-with-dictionary) – NikolayKondratyev

+0

是否需要定制而不需要重新编译? –

+0

您是否确实有需要替换的文本,或者您是否生成了“带ID的客户端:5634有文档:OINV,ORDR”? –

回答

1

使用字典和LINQ:

var str2 = new StringBuilder(str); 

foreach (var pair in databases) { 
    str2.Replace(pair.Key, pair.Value); 
} 

var newstr = str2.ToString(); 
5

理想情况下,你不应该做字符串:

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)); 

后者还可以,一旦你创建了词典使用用生成的字符串替换 - 而是从翻译的字符串生成它。因此,例如 - 不知道你实际上已经得到了什么样的代码 - 你可以有:

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 
}