이 코드 줄을 가로 질러 달려보십시오.
FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();
두 개의 물음표는 어떤 의미입니까, 어떤 종류의 삼항 연산자입니까? Google에서 찾기가 어렵습니다.
답변
그것은 합체 연산자이며, 삼항 (즉시) 연산자와 매우 비슷합니다. 또한보십시오 ?? 운영자-MSDN .
FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();
로 확장 :
FormsAuth = formsAuth != null ? formsAuth : new FormsAuthenticationWrapper();
다음으로 확장됩니다.
if(formsAuth != null)
FormsAuth = formsAuth;
else
FormsAuth = new FormsAuthenticationWrapper();
영어로, “왼쪽에있는 것이 널이 아닌 경우이를 사용하고 그렇지 않으면 오른쪽에있는 것을 사용하십시오”를 의미합니다.
이 중 몇 가지를 순서대로 사용할 수 있습니다. 다음 명령문은 널 Answer#
이 아닌 첫 번째를 지정합니다 Answer
(모든 응답이 널인 경우에는 Answer
널임).
string Answer = Answer1 ?? Answer2 ?? Answer3 ?? Answer4;
또한 위의 확장은 개념적으로 동일하지만 각 식의 결과는 한 번만 평가됩니다. 예를 들어 표현식이 부작용이있는 메소드 호출 인 경우에 중요합니다. (이 점을 지적한 @Joey에게 감사의 뜻을 전합니다.)
답변
아무도 마법의 단어를 아직 말하지 않았기 때문에 그것은 null 통합 연산자 입니다. C # 3.0 언어 사양 의 섹션 7.12에 정의되어 있습니다 .
특히 표현식에서 여러 번 사용될 때 작동하는 방식 때문에 매우 편리합니다. 형식의 표현 :
a ?? b ?? c ?? d
a
null이 아닌 경우 expression의 결과를 제공하고 b
, 그렇지 않으면 try c
, 그렇지 않으면 try을 제공 d
합니다. 모든 지점에서 단락됩니다.
또한의 유형이 d
널 입력 가능하지 않은 경우 전체 표현식의 유형도 널 입력 가능하지 않습니다.
답변
Null 통합 연산자입니다.
http://msdn.microsoft.com/en-us/library/ms173224.aspx
네, 그것이 무엇인지 알지 않는 한 검색이 거의 불가능합니다! 🙂
편집 : 그리고 이것은 다른 질문에서 멋진 기능입니다. 당신은 그들을 연결할 수 있습니다.
답변
모두들 감사합니다. MSDN 사이트에서 가장 간결한 설명은 다음과 같습니다.
// y = x, unless x is null, in which case y = -1.
int y = x ?? -1;
답변
??
값이 널일 때 널 입력 가능 유형에 값을 제공해야합니다. 따라서 formsAuth가 null이면 새 FormsAuthenticationWrapper ()를 반환합니다.
답변
두 개의 물음표 (??)는 해당 Coalescing 연산자를 나타냅니다.
Coalescing 연산자는 체인에서 첫 번째 NON-NULL 값을 반환합니다. 실제로 모든 것을 보여주는 이 YouTube 비디오 를 볼 수 있습니다 .
그러나 비디오의 내용을 더 추가하겠습니다.
통합의 영어 의미를 보면 “함께 통합”이라고 말합니다. 예를 들어 아래는 4 개의 문자열을 연결하는 간단한 통합 코드입니다.
그래서 경우는 str1
이다 null
그것을 시도 할 str2
경우 str2
입니다 null
그것은 시도 할 것이다 str3
그래서이 null이 아닌 값을 가진 문자열을 찾을 때까지합니다.
string final = str1 ?? str2 ?? str3 ?? str4;
간단히 말해 Coalescing 연산자는 체인에서 첫 번째 NON-NULL 값을 반환합니다.
답변
삼항 연산자의 짧은 손입니다.
FormsAuth = (formsAuth != null) ? formsAuth : new FormsAuthenticationWrapper();
또는 삼항을하지 않는 사람들을 위해 :
if (formsAuth != null)
{
FormsAuth = formsAuth;
}
else
{
FormsAuth = new FormsAuthenticationWrapper();
}