2017-11-13 4 views
1

문자열이 ""과 같은지 확인하고, 사용하지 않는 경우 기본값을 사용하는 프로그램을 만들고있었습니다. 나는 string != "" ? string : "default value"을 할 수 있다는 것을 알고 있지만, 나는 계속 입력하면 string처럼 비효율적이라고 생각합니다. 물론 string을 쓰는 것은 나에게는 문제가되지 않지만 다른 프로젝트에서 긴 패키지 이름을 가진 문자열을 참조해야한다면 좀 더 짜증이납니다.더 효율적인 삼항 연산자

+1

당신이 확인하는 경우 당신이 사용할 수있는 null 값? 연산자??. b? .c ?? "태만". 귀하의 경우에, 나는 확장 메소드 – Seb

+0

@Seb을 찾으러 가고 싶습니다. 그러나 문자열은 null이 아닙니다. ""와 같습니다. – Orion31

+0

'a.b.c.d.string.toString() '은 무엇입니까? 예를 들어 줄 수 있습니까? –

답변

1

DavidG의 옵션과 유용한 링크에 따르면이 확장 기능을 사용할 수 있습니다.

public static string IfEmpty(this string str, string alternate) 
{ 
    return str?.Length == 0 ? str : alternate; 
} 

(이것은 'STR'가 null의 경우에도 대체 문자열을 반환합니다) 그리고 mystring.IfEmpty("something else")

소스로 사용 What is the difference between String.Empty and "" (empty string)?.

또한 정말 긴 문자열을 참조 할 필요가 없습니다.

+2

'str'이 물론 null이면 던질 것입니다. 'string.IsNullOrEmpty'를 사용하는 것을 선호합니다. – DavidG

+0

이것은 내가 설명한 것과 같은 연산자가 존재하지 않는다고 생각합니다. – Orion31

+0

nop 'IsNullOrEmpty'가 가장 비슷하지만, 다른 의견에서 말한 것처럼 성능을 향상시키지 못합니다. –

3

현재 원하는 작업을 수행 할 수있는 연산자가 없습니다.

그러나 실제로는 여기에 "기본 또는 - 빈 병합 연산자"에 대한 제안이있다 : 당신이 지금 할 수있는 최선은 다음과 같이 확장 메서드를 선언하는 것입니다

https://github.com/dotnet/csharplang/issues/183

:

public static string NullIfEmpty(this string str) 
    { 
     return string.IsNullOrEmpty(str) ? null : str; 
    } 

과 같이 사용 :

var foo = yourString.NullIfEmpty() ?? "default value";