System.Uri 클래스의 함정

오늘 밟은 함정인데, System.Uri 클래스의 Equals() 메서드는 UserInfoFragment를 제외하고 비교를 하더군요… 따라서 https://example.com/#foohttps://example.com/#bar가 같은 URI로 취급됩니다.

이를 원치 않으면 uri.Equals(other) && uri.UserInfo == other.UserInfo && uri.Fragment == other.Fragment와 같이 추가적인 비교를 따로 코딩할 수밖에 없습니다.

왜 이렇게 만들었는지 얼핏 알 것도 같지만 모르고 버그 만들기 십상이네요. :sob: 다른 분들은 겪지 마시라고 공유해 봅니다. (이런 건 자유게시판에 올리는 게 맞나요?)

18 Likes

팁 고고씽

6 Likes

팁으로 옮겼습니다!

7 Likes

앗 몰랐는데 감사합니다! 그래서 찾아보니깐 OriginalString으로 비교하면 되네요!

7 Likes

의외로 닷넷 클래스들 중에 이런 함정을 가지고 있는 것들이 제법 많더라고요. :sob: 이런 지뢰를 피하기 위해서라도 유닛 테스트를 만드는게 도움이 될 때가 있는 것도 같습니다.

6 Likes