많은 매개 변수를 가진 긴 문자열에 가장 읽기 쉬운 String.format는 무엇입니까?
-
20-09-2019 - |
문제
예를 들어:
String login = String.Format("computer={0}&ver={1}.{2}.{3}&from={4}&realcomputername={5}&type={6}&Channels={7}&Hotkeys={8}&ID={9}\r\n",
serviceConfig.Computer,
serviceConfig.Version.Major,
serviceConfig.Version.Minor,
serviceConfig.Version.Build,
userName,
Environment.MachineName,
type,
serviceConfig.ChannelsString,
serviceConfig.HotKeysString,
serviceConfig.AlarmGroupName);
이것은 매우 읽기 쉬운 코드를 만들지 않으며 점점 더 많은 매개 변수가 추가됨에 따라 더 추악 해 보이고 어떤 매개 변수가 어떤 슬롯에 들어가는 지 찾는 것이 더 혼란 스럽습니다.
나는 이것이 멍청한 질문이라는 것을 알고 있으며, 나는 텍스트를 더 읽기 쉽게 포맷하는 방법을 요구한다고 생각하지만, 더 나은 방법이 있다면 그것을 알고 싶습니다.
해결책
당신은 볼 수 있습니다 StringBuilder 클래스 문자열의 어셈블리를 여러 줄 위로 분할하십시오.
그만큼 부록 방법 (감사합니다 Joel) 은이 경우 원하는 것입니다.
다른 팁
String login = String.Format(
"computer={0}"+
"&ver={1}.{2}.{3}"+
"&from={4}"+
"&realcomputername={5}"+
"&type={6}"+
"&Channels={7}"+
"&Hotkeys={8}"+
"&ID={9}\r\n",
serviceConfig.Computer,
serviceConfig.Version.Major,
serviceConfig.Version.Minor,
serviceConfig.Version.Build,
userName,
Environment.MachineName,
type,
serviceConfig.ChannelsString,
serviceConfig.HotKeysString,
serviceConfig.AlarmGroupName);
LINQ를 사용할 수 있다고 가정하면 인수를 Dictionary<string, string>
, 그런 다음 인수에 합류하십시오.
Dictionary<string, string> args = new Dictionary<string, string>
{
{"computer", serviceConfig.Computer},
{"ver", string.Format("{0}.{1}.{2}",
serviceConfig.Version.Major,
serviceConfig.Version.Minor,
serviceConfig.Version.Build)},
{"from", userName},
{"realcomputername", Environment.MachineName},
{"type", type},
{"Channels", serviceConfig.ChannelsString},
{"Hotkeys", serviceConfig.HotKeysString},
{"ID", serviceConfig.AlarmGroupName},
};
string login = string.Join("&", args.Select(arg =>
string.Format("{0}={1}", arg.Key, arg.Value)).ToArray());
이것은 간단한 string.format보다 약간 느리고 메모리 집약적이지만 HTTP 요청을하려는 것처럼 보이므로 병목 현상이 아님을 거의 보장 할 수 있습니다.
이 최종 라인은 또한 이와 같은 쿼리 문자열을 만들 때 언제든 사용할 수있는 확장 방법으로 끌어 올릴 수 있습니다.
또한 사전은 삽입 순서를 보존하지 않기 때문에 쿼리 문자열의 매개 변수가 정확한 순서에 있다는 것을 보장하지는 않습니다. 그것은 중요하지 않지만, 경우에는 사전을 다음으로 대체 할 수 있습니다. List<KeyValuePair<string, string>>
(순서대로 작동해야합니다).
제휴하지 않습니다 StackOverflow