C\#9.0 새로운 특성의 매개 변 수 를 간단히 말 합 니 다.
public static string HashPassword(string password)
{
if(password is null)
{
throw new ArgumentNullException(nameof(password));
}
...
}
이상 이 발생 했 을 때 호출 자 는 무슨 문제 인지 쉽게 알 수 있다.이 검 사 를 추가 하지 않 으 면 대상 을 인 스 턴 스 로 인용 하지 않 은 오 류 를 시스템 에서 던 져 호출 자가 오 류 를 진단 하 는 데 불리 할 수 있 습 니 다.이 장면 이 너무 흔 하기 때문에 나 는 자주 나의 프로젝트 에서 보조 류 를 통 해 이런 검 사 를 한다.이 종 류 는 검사 방법의 매개 변 수 를 사용 하기 때문에 Guard 라 고 명명 되 었 습 니 다.주요 코드 는 다음 과 같 습 니 다.
public static class Guard
{
public static void NotNull(object param, string paramName)
{
if (param is null)
{
throw new ArgumentNullException(paramName);
}
}
public static void NotNullOrEmpty(string param, string paramName)
{
NotNull(param, paramName);
if (param == string.Empty)
{
throw new ArgumentException($"The string can not be empty.", paramName);
}
}
public static void NotNullOrEmpty<T>(IEnumerable<T> param, string paramName)
{
NotNull(param, paramName);
if (param.Count() == 0)
{
throw new ArgumentException("The collection can not be empty.", paramName);
}
}
...
}
이 종 류 는 null,빈 문자열,빈 집합 검 사 를 포함 하여 세 가지 흔히 볼 수 있 는 비 공 검 사 를 포함 합 니 다.사용 예시:
public static string HashPassword(string password)
{
Guard.NotNull(password, nameof(password));
...
}
public static IEnumerable<TSource> DistinctBy<TSource, TKey>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector)
{
Guard.NotNullOrEmpty(source, nameof(source));
...
}
이러한 비공 식 검사 에서 흔히 볼 수 있 는 C\#9.0 은 이에 대해 간소화 하고 조작 부호'!'를 추가 했다.매개 변수 이름 뒤에 놓 으 면 이 매개 변 수 는 null 값 을 받 아들 이지 않 음 을 표시 합 니 다.사용 방식 은 다음 과 같 습 니 다.
public static string HashPassword(string password!)
{
...
}
많은 것 을 간소화 했다.이 제안 은 이미 C\#9.0 의 특성 에 포함 되 었 으 나 현재(2020-06-13)개발 이 완료 되 지 않 았 다.이 기능 은 null 검사 가 아 닌 다른 매개 변수 검사 장면 만 지원 합 니 다.저 는 보조 클래스 를 통 해 빈 문자열,빈 집합 과 같은 검 사 를 할 것 입 니 다.
이 기능 은 공공 라 이브 러 리 를 쓸 때 유용 하지만 대부분의 사람들 이 업무 논리 코드 를 쓸 때 이 기능 을 사용 하지 못 할 수도 있 고 자신의 매개 변수 검사 체 제 를 사용 할 수도 있다 고 생각 합 니 다.예 를 들 어 저 는 프로젝트 에서 상층 API 개발 에 대해 보조 클래스(ApiGuard)를 패키지 하여 매개 변 수 를 검 사 했 습 니 다.만약 에 매개 변수 가 통과 하지 않 으 면 Argument Null Exception 이 아니 라 해당 하 는 업무 이상 을 던 집 니 다.예 를 들 어 자신의 GeekGist 프로젝트 를 캡 처 하 는 코드 입 니 다.
public static class ApiGuard
{
public static void EnsureNotNull(object param, string paramName)
{
if (param == null) throw new BadRequestException($"{paramName} can not be null.");
}
public static void EnsureNotEmpty<T>(IEnumerable<T> collection, string paramName)
{
if (collection == null || collection.Count() == 0)
throw new BadRequestException($"{paramName} can not be null or empty.");
}
public static void EnsureExist(object value, string message = "Not found")
{
if (value == null) throw new BadRequestException(message);
}
public static void EnsureNotExist(object value, string message = "Already existed")
{
if (value != null) throw new BadRequestException(message);
}
...
}
사용 예시:
public async Task UpdateAsync(long id, BookUpdateDto dto)
{
ApiGuard.EnsureNotNull(dto, nameof(dto));
ApiGuard.EnsureNotEmpty(dto.TagValues, nameof(dto.TagValues));
var book = await DbSet
.Include(x => x.BookTags)
.FirstOrDefaultAsync(x => x.Id == id);
ApiGuard.EnsureExist(book);
Mapper.Map(dto, book);
...
}
ApiGuard 의 장점 은 API 인터페이스 가 요구 에 맞지 않 는 인 자 를 받 았 을 때 응답 반환 내용 을 사용자 정의 할 수 있다 는 것 이다.예 를 들 어 Filter 나 미들웨어 를 추가 하여 전체 업무 코드 이상 을 캡 처 하고 서로 다른 이상 에 따라 전단 의 서로 다른 상태 코드 와 메시지 알림 을 되 돌려 줍 니 다.
private Task HandleExceptionAsync(HttpContext context, Exception exception)
{
ApiResult result;
if (exception is BadRequestException)
{
result = ApiResult.Error(exception.Message, 400);
}
else if (exception is NotFoundException)
{
message = string.IsNullOrEmpty(message) ? "Not Found" : message;
result = ApiResult.Error(message, 404);
}
else if (exception is UnauthorizedAccessException)
{
message = string.IsNullOrEmpty(message) ? "Unauthorized" : message;
result = ApiResult.Error(message, 401);
}
...
}
단지 하나의 매개 변수 가 비 공 검사 일 뿐 실제 개발 에 있어 많은 학문 이 있 기 때문에 이론 을 잘 배 워 야 실천 을 많이 해 야 더욱 투철 하 게 이해 할 수 있다.여기 서 C\#9.0 의 새로운 특성 에 대한 매개 변수 비 공 검사 간소화 에 관 한 글 을 소개 합 니 다.더 많은 관련 C\#9.0 매개 변수 비 공 검사 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!
저자:왕 량
출처:http://cnblogs.com/willick
연락:[email protected]
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C\#9.0 새로운 특성의 매개 변 수 를 간단히 말 합 니 다.이 종 류 는 null,빈 문자열,빈 집합 검 사 를 포함 하여 세 가지 흔히 볼 수 있 는 비 공 검 사 를 포함 합 니 다.사용 예시: 이러한 비공 식 검사 에서 흔히 볼 수 있 는 C\#9.0 은 이에 대해 간...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.