2011-12-15 5 views
7

나는 새로운 라인과 탭을 대표하는 상수 C# 4 문자열을 원하는 :줄 바꿈 + 탭의 문자열 상수? 다음과 같이

internal const string segment = Environment.NewLine + "\t"; 
:

internal const string segment = "\r\n\t"; 

나는 내가 다음과 같이 사용할 수 있습니다 생각 Environment.Newline가 알고

제 질문은 줄 바꾸기와 줄이있는 문자열 상수를 구성하는 가장 효율적인 방법은 무엇입니까?

+2

두 번째 플랫폼은 플랫폼에 독립적이므로 –

+0

효율적입니다. 가독성? 순수한 속도? OS 이식성? "\ r \ n \ t"은 아마도 당신에게 더 나은 성능을 제공하지만 브라우저, Windows/Unix 등을 포함한 모든 환경에 적합하지 않을 수 있습니다. –

+0

@orn : 반대로 두 번째 값은 절대적으로 다릅니다 * 플랫폼에. –

답변

13

하는 것은 효율면에서 차이가 전혀 없다, 당신이 위와 같이 const로 문자열을 선언 제공. 모든 상수는 컴파일 타임에 대체되고 인턴 된 문자열을 사용합니다.

두 번째 옵션은 컴파일 타임 상수가 아니므로 컴파일되지 않습니다. 그것은이 될 수 없습니다, 비록 내 취향을 내가 개인적으로 의도의 측면에서이 명확를 찾을

internal static readonly string segment = Environment.NewLine + "\t"; 

, 그것은 다음과 같습니다 위해 그것을 사용하는, 당신은 그것을 선언 할 필요 것 컴파일 시간 상수. 여분의 오버 헤드/효율성 손실은 매우 작기 때문에 컴파일시 간 상수에 대해 명확한 의도와 읽기 쉬운 코드를 개인적으로 선택하게됩니다. 현재 플랫폼의 행 분리를 사용하는 것입니다 당신이 포트 모노에이 코드를, 그리고 당신의 목표 경우 Environment.NewLine를 사용

참고도 올바른되는 이점이있다. 특정 경우에 비 Windows 플랫폼에서는 첫 번째 버전이 올바르지 않습니다. "\r\n\t"을 구체적으로 포함시키고 플랫폼 별 라인 구분 기호를 원하지 않으면 Environment.NewLine은 부적절한 선택입니다.

+0

+1은 플랫폼의 차이점을 지적합니다. – vcsjones

+2

"정확함"은 OP가 사용하려고하는 방법에 따라 다릅니다. 목표가 "캐리지 리턴, 줄 바꿈, 탭"을 나타내는 것이면 첫 번째 양식은 정확하고 두 번째 양식은 올바르지 않습니다. 목표가 "현재 플랫폼에 대한 줄 분리 기호 다음에 탭이 오는"것을 나타내는 것이면 두 번째 형식이 올바른 것입니다. 보편적으로 올바른 일도 아닙니다. –

+0

@ 존스 켓 네, 저는 OP의 일부에 Environment가 사용되기를 바랐습니다 .NewLine은 OP가 라인 구분 기호를 원한다고 제안했습니다. –

5

const은 작동하지 않습니다. static readonly을 사용하십시오.

internal static readonly string segment = Environment.NewLine + "\t"; 
+0

상수는 상수 문자열이어야합니다 "Const입니다" – MethodMan

+0

@DJKRAZE - 자세히 설명해 주시겠습니까? 이는 상수 값을 만드는 데 사용할 수있는 방법입니다. –

+0

내부 정적 문자열 세그먼트 = Environment.NewLine + "\ t"; 작동하거나 개인 정적 문자열로 만듭니다. – MethodMan

1

순수 속도 효율은 첫 번째, 두 번째는 컴파일 할 수없는 다음 const을 만들 수없고 특히 이후, 이길 것이다.

을 정지, 두 번째는 참으로 터무니없는 빠른 될 것입니다, 그래서 나는 상관하지 않을 것이다.

이보다 더 중요한 것은 동일한 것이 아니라는 것입니다.

"왜 당신은 \ r \ n \ t"을 사용하고 있습니까? 될 다른 사용

internal static readonly string segment = Environment.NewLine + "\t"; 

:

Windows에서 및 Windows 줄 바꿈에이기 때문에 당신이 \ 연구 \ 없음 \ t를 사용하는 경우 다음 당신은 확실히 사용해야 \ 일반적으로 연구 \ n을 수 있습니다 잘못하면 앞으로 몇 년 동안 볼 수없는 버그가 생길 수 있습니다.

는 "탭 다음에 CRLF와 별도의 세그먼트가"그럼 당신은 확실히 사용해야 말한다 규격 작업을하고 있기 때문에 당신이 \ 연구 \ 없음을 사용하는 경우 :

internal const string segment = "\r\n\t"; 

은 Using 다른 것은 틀릴 것이다.

이것은 실제 사람들을 물들이는 것입니다.Windows 사용자는 머리글과 본문 사이의 머리글 2 사이에서 Windows 줄 바꿈을 사용하는 HTTP 코드를 작성합니다. 그런 다음 시스템이 사용하는 것이 무엇이든 관계없이 HTTP가 \ n \ n을 요구하기 때문에 개행이 \ n 위치에 어긋나고 \ n 끊어집니다. 그 반대의 경우도 마찬가지입니다.

(엄격한/엄격한 원칙에 따라 다른 코드가 계속 잘못된 것으로 받아 들여서 거기에 다양한 줄 바꿈 형식을 허용한다고 가정하는 것도 좋은 생각입니다.)