저는 업그레이드 프로젝트를 진행하고 있으며 최근에는 업그레이드 된 버전의 DLL에 문제가 발생하기 시작했습니다. 나는 원래 DLL을 디 컴파일하고 다음 if 문 발견이 연산자는 무엇입니까 "??"
if (fieldConfiguration == null && Context.ContentDatabase != null)
{
Item obj = Context.ContentDatabase.SelectSingleItem(
string.Format("//*[@@templateid='{0}' and @@key='{1}']",
(object) TemplateIDs.TemplateField, (object) fieldName));
}
내가 다음 DLL의 업그레이드 된 버전을 디 컴파일을 다음과 같이 진술했다 :
if (fieldConfiguration == null && (Context.ContentDatabase ?? Context.Database) != null)
{
Item obj = Context.ContentDatabase.SelectSingleItem(
string.Format("//*[@@templateid='{0}' and @@key='{1}']",
(object) TemplateIDs.TemplateField, (object) fieldName));
}
나는 코드를 단계별로 할 수 있었다 dotPeek로 DLL을 디 컴파일하고 dotPeek 심볼 서버 기능을 사용합니다. Context.ContentDatabase가 null이므로 업그레이드 DLL을 사용할 때 코드가 실패하고 있음을 알 수 있습니다. 내가 이해할 수없는 것은 이중 삼항 연산자가 어떻게 평가되는지에 있습니다. 누군가가 저에게 무슨 일이 일어나는지 분명히 할 수 있습니까? 이 어셈블리의 제작자가 Context.ContentDatabase에 대해 null 체크를 원했지만 실수를했을 수도 있습니다. 도와 주셔서 감사합니다!
이진 null-coalesce 연산자 ('? ') "삼항"을 호출하고 있습니까? –
그래, 그게 뭔지 몰랐어 하하 –
그래서 "이중 삼자"는 "두 개의 물음표"를 의미합니까? 단항은 무언가 중 하나가 있다는 것을 의미하고, 이진은 무언가 중 두 가지를 의미하고, 삼항은 세 가지를 의미하며, 사중은 분명해야합니다. –