2016-07-31 3 views
3

(SAP Business One)으로 작업하는 정보 시스템에서 모든 문서는 SQL 테이블에 표시됩니다.C# - const 문자열 사전

클라이언트 위해 문서 : ORDR

송장 문서 : OINV

구매 견적 : OPRQ

등 ...

때 사용자가 클릭 하나의 예를 들어

버튼 중 일부는 SQL 테이블의 일부를 검사하는 exist 함수를 사용해야하며이 클라이언트에 시스템에 문서가 있는지 확인해야합니다. . 이 함수는이 클라이언트가 시스템에 가지고있는 문서를 나타내는 테이블 이름과 함께 문자열 메시지를 반환합니다.

테이블 이름을 문서 이름으로 바꿀 기능을 작성해야합니다.

eample : 나는 문자열 사전을 사용해야 추측

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

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

요구를 대체합니다. 그것을하는 방법?

var str2 = new StringBuilder(str); 

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

var newstr = str2.ToString(); 
+0

가능한 복제 [C# 문자열 사전 교체 (http://stackoverflow.com/questions/1231768/c-sharp -string-replace-with-dictionary) – NikolayKondratyev

+0

다시 컴파일하지 않고도 사용자 지정이 가능해야합니까? –

+0

실제로 텍스트를 바꿔야합니까, 아니면 "ID : 5634에 클라이언트 : OINV, ORDR"클라이언트를 생성하고 있습니까? –

답변

1

: 당신이 당신의 사전을 만든 후에

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 
} 
5

이상적으로 문자열을 수행해서는 안 : 사전 및 Linq를 사용

감사