DateTime에서 Parse(string s) 및 TryParse(string s, out datetime)는 모두 문자 날짜 및 시간을 변환하는 데 사용됩니다. 동등한 System.DateTime으로 변환됩니다. 그러면 함수의 매개변수가 다르다는 점 외에 차이점이 있는 걸까요? 먼저 코드를 살펴보겠습니다.
string dateTimeStr = ""; DateTime dt = DateTime.Parse(dateTimeStr);
빈 문자열 을 실행하여 날짜 및 시간 유형으로 변환할 수 없으며 Parse()에서 예외가 발생합니다. : System.FormatException: s에 날짜 및 시간의 유효한 문자열 표현이 포함되어 있지 않습니다. 그러나 TryParse를 실행할 때 이 변환 방법은 다음과 같습니다.
string dateTimeStr = ""; DateTime dt2; //dt2未经初始化,就被传递给函数TryParse() bool sucflag = DateTime.TryParse(dateTimeStr, out dt2);
변환은 먼저 예외를 발생시키지 않습니다, dt2에는 날짜 및 시간의 최소값이 할당됩니다. , sucflag는 거짓입니다. 함수에 대한 주석을 살펴보세요.
이 메서드가 반환될 때 변환이 성공하면 s에 포함된 날짜 및 시간에 해당하는 System.DateTime 값이 포함됩니다. ; 변환이 실패하는 경우 System.DateTime.MinValue. s 인수가 null이거나, 빈 문자열("")이거나, 날짜 및 시간의 유효한 문자열 표현을 포함하지 않는 경우 변환이 실패합니다. *이 매개변수는 초기화 없이 전달됩니다. 이 함수는 예외를 발생시키지 않습니다.
더 자세히 말하자면, parse()에서 발생한 예외는 필연적으로 성능에 영향을 미치지 않습니다. 이것은 A 디자인 패턴을 Try-Parse 패턴이라고 합니다. 다음은 Microsoft의 공식 설명입니다.
성능에 매우 민감한 API의 경우 이전 섹션에서 설명한 Tester-Doer 패턴보다 훨씬 빠른 패턴을 사용해야 합니다.Tester-Doer Try-Parse 모드를 설명하면서 Microsoft는 제안했습니다. 또 다른 모드:패턴 조정이 필요합니다. 잘 정의된 테스트 사례를 멤버 의미의 일부로 만들기 위한 멤버 이름입니다. 예를 들어 DateTime은 문자열 구문 분석이 실패할 경우 예외를 발생시키는 Parse 메서드를 정의합니다. 파싱하지만 파싱에 실패하면 false를 반환하고 out 매개 변수를 사용하여 파싱에 성공한 결과를 반환합니다.
Tester-Doer 모드, Tester-Doer 모드란 무엇인가요? 함수에 예외를 작성하면 성능이 저하됩니다. Microsoft는 예외로 인한 부작용을 줄이기 위해 이 모드를 제공했습니다.
다음 코드:
ICollection<int> numbers = 省略获取数据的逻辑 numbers.Add(1);//Add此处不做可写性检查위 결함: 컬렉션이 읽기 전용인 경우 Add 메서드에서 예외가 발생합니다. 이 메소드가 호출되는 경우 예외가 발생하여 시스템 성능에 영향을 미치는 경우가 많습니다. 이러한 디자인 결함을 피하기 위해 Microsoft는 다음을 제안했습니다. 때때로 예외를 발생시키는 멤버의 성능은 멤버를 두 개로 나누어 향상될 수 있습니다. 패턴 요약:
멤버는
이 예에서IsReadOnly
속성인 Condition은잠재적으로 발생하는 작업을 수행하는 데 사용되는 멤버로, 이 예에서는 Add 메서드입니다. 성능 향상을 위해 읽기 전용 예외가 발생하는 횟수를 추가합니다. 요약 Try-Parse Pattern과 Tester-Doer 모드는 예외 발생을 대체하고 설계 성능을 최적화하는 역할을 하는 두 가지 최적화 방법입니다.
위 내용은 .NET Framework - Try-Parse와 Tester-Doer의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!