많은 매개 변수를 가진 긴 문자열에 가장 읽기 쉬운 String.format는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1528210

문제

예를 들어:

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>> (순서대로 작동해야합니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top