주앙 고메스 :
내가 문자열 [] 내에서 하나의 문자열을 교체하는 작업 코드가 있습니다. 이 문자열에서 "[1]"근무 :
private string returnWithLinks(string adminString, int adminId)
{
var returnString = "Nothing at all";
int pFrom = adminString.IndexOf("[") + "[".Length;
int pTo = adminString.LastIndexOf("]");
var getSourceId = adminString.Substring(pFrom, pTo - pFrom);
int i = 0;
bool tryParse = int.TryParse(getSourceId, out i);
if(!tryParse) {returnString = "this is not an int!";} else {
if(i == 1) {
returnString = adminString.Replace("[1]", "<a>something</a>" + var1fromsomwhere + i);
} else if (i == 2) {
returnString = adminString.Replace("[2]", "<a>other something</a>" + var2fromsomwhere + i);
} else if (i == 3) {
returnString = adminString.Replace("[3]", "<a>other something</a>" + var3fromsomwhere + i);
} else if (i == 4) {
returnString = adminString.Replace("[4]", "<a>other something</a>" + var4fromsomwhere + i);
} else if (i == 5) {
returnString = adminString.Replace("[5]", "<a>other something</a>" + var5fromsomwhere + i);
}
}
return returnString;
}
그러나 지금과 같은 모든 토큰 발행 수를 대체 할 수 있어야합니다 :
adminString = "[1][2]somthingelse[2]another[4]aa";
나는 그 경우 조항 각 INT 루핑, int 배열에 토큰 내부의 모든의 int 배치에 대해 생각했지만, 배열을 생성하는 것은 completly 밖으로 내 leage의입니다.
이걸 어떻게 달성 할 수 있습니까?
절은 IF와 통해 어레이 I 의지 루프를 갖는 후.
조나단 알파 :
당신은 배열 또는 루프가 필요하지 않습니다.
사전을 사용하여 예를 들어이 작업을 수행하는 방법에는 여러 가지가 ...있다.
그러나 귀하의 경우 복잡한 것들에 대한 필요가 없습니다.
단 한 줄의 코드는 다음과 같이 모든 것을 대체합니다 :
private string returnWithLinks(string adminString, int adminId)
{
var returnString = adminString
.Replace("[1]", "<a>something</a>" + var1fromsomwhere + 1)
.Replace("[2]", "<a>something</a>" + var2fromsomwhere + 2)
.Replace("[3]", "<a>something</a>" + var3fromsomwhere + 3)
.Replace("[4]", "<a>something</a>" + var4fromsomwhere + 4)
.Replace("[5]", "<a>something</a>" + var5fromsomwhere + 5);
return returnString;
}
사전 및 루프 활용하기 :
private static readonly Dictionary<string, string> _replacements = new
Dictionary<string, string>
{
{ "[1]", "<a>something</a>" + var1fromsomwhere + 1 },
{ "[2]", "<a>something</a>" + var2fromsomwhere + 2 },
{ "[3]", "<a>something</a>" + var3fromsomwhere + 3 },
{ "[4]", "<a>something</a>" + var4fromsomwhere + 4 },
{ "[5]", "<a>something</a>" + var5fromsomwhere + 5 },
};
private string returnWithLinks(string adminString, int adminId)
{
var keys = _replacements.Keys.ToArray();
var returnString = adminString;
for(var i = 0; i < keys.Length; i++)
{
var key = keys[0];
returnString = returnString.Replace(key, _replacements[key]);
}
return returnString;
}
당신은 사전 청소기를 보이지만, 코드 라인의 유지 보수 및 수의 측면에서 똑같은 일이 볼 수 있듯이.
당신은 여전히 모든 교체를 위해 사전에 한 줄을 추가해야합니다.
사전이 하드 코딩되어 있지 않으면 내가 사전에 루프에서 그것을 할 것입니다 유일한 이유가 될 것이다.
사전은 예를 들어 데이터베이스의 값으로 채워졌다 경우 의미.
루프의 또 다른 단점은 문자열 할당의 양을 반복 당 하나 개의 추가 할당입니다.