2017-01-25 1 views
0

람다 식 내에서 예외를 방지, 그래서으로 구현 널 조건 연산자에 대한의 독립을 작성하는 방법은 다음과 운영자 대신 코드의 가독성을 향상시킬 수 있습니다. 이것은 클래스 초기화 코드에서 사용되는 수백 개의 삼중 연산자를 제거합니다. 나쁜 코드는 아니지만 읽기가 어렵습니다.내가 잠시 동안 비주얼 스튜디오 2013에 붙어

문제에는이 기능이 없습니다. 잘 작동한다. 문제는 그것의 사용과이다

FirstProperty가 null 인 경우에
var myValue = myEntity.Property.IfNotNull(p => p.FirstProperty.SecondaryProperty); 

이, 비주얼 스튜디오 내가 그것을 처리하고있다하더라도 NullReferenceException를보고합니다. 이것은 매우 짜증나게 할 수 있습니다. 나는 보통 NullReferenceException 예외를 얻지 않지만,이 예외 경고를 끄고 싶지는 않습니다. 내가 NullReferenceException을 잡는 이유는 (분명히 null 조건 연산자가 이것을하지 않는다) 복합 속성 경로의 경우에 IfNotNull의 중첩을 피하기 위해서입니다.

operation의 내용을 소비자가 원하는대로 (예 : 메소드, 필드, 심지어 논리 연산) 원하기 때문에 리플렉션을 사용하고 싶지 않습니다.

우리가 비주얼 스튜디오 2017

(그래, 난 널 조건 연산자 비주얼 스튜디오 2015은 최신이기 때문에 우리는 2017로 업그레이드에 사용할 수 있는지 알고로 업그레이드 할 때까지 난 정말 기다릴 수 없어 버전)

추가 : 디버깅 할 때 Visual Studio에서 예외를 팝업 창으로보고합니다. 디버깅 중이 지 않으면 런타임 또는 단위 테스트에서 발생하지 않습니다. catch 블록이 있는데 디버깅하는 동안 Visual Studio에서이 예외가 나타나서는 안됩니다. 그냥 붙잡아 야합니다.

아직도 더 : 좋아, 나는 사람들이 무엇을 요구하고 있는지 알고있다. 이것은 런타임 문제는 아닙니다. 그것은 디버그 문제입니다. Visual Studio는 NullReferenceException을 포착하는 try catch 블록 내에서 호출 된 람다 식에서 NullReferenceException을 throw하여보고합니다. Visual Studio에서 왜 경고해야합니까? 어떻게 멈추게 할 수 있습니까? 그것은 내가 할 수있는 것처럼 간결합니다.

+2

를 사용하여 C# 6 (VS2015) :'VAR myValue = myEntity .Property .SecondaryProperty,' –

+2

@TimSchmelter 영업 이익은 VS 즉, (여전히 사용 VS2013) – Nkosi

+0

@Nkosi의 특정 버전을 사용할 수 없습니다 :? 내가 ' 그것을 보았다. 1) OP가 2015를 얻을 수 있다면 2017은 필요하지 않습니다. 2.) 2015 –

답변

0

리뷰를 작성하는 데 너무 오랜 시간이 걸립니다.

다음 단위 테스트

[TestMethod] 
public void _TestNullCoalesceningExtension() { 
    var myEntity = new MyEntity 
    { 
     Property = new AnotherEntity() 
    }; 
    var myValue = myEntity.Property.IfNotNull(p => p.FirstProperty.SecondaryProperty); 
    Assert.IsNull(myValue); 
} 

public class MyEntity { 
    public AnotherEntity Property { get; set; } 
} 

public class AnotherEntity { 
    public YetAnotherClass FirstProperty { get; set; } 
} 

public class YetAnotherClass { 
    public object SecondaryProperty { get; set; } 
} 

예외가 디버깅하는 동안 또는 완료를 실행하거나 발생하지 된 OP에 제공된 예를 사용하여 수행 하였다.

+0

어떤 Visual Studio 버전을 사용하고 있습니까? – Jordan

+0

@Jordan, 비주얼 스튜디오 2013 커뮤니티 에디션. – Nkosi

+0

예외 경고를 받으려면^this ^를 수행해야합니다. 'Property'가 null이면 그냥 기본값을 반환합니다. 만약'FirstProperty'가 null이면 경고를받습니다. 예외가 람다 안에서 발생하면 – Jordan

관련 문제