오히려 명시 적으로 입력 범위 변수 사용 Cast<T>
에 컴파일러는 기본적으로 전화를 삽입하기 위해 더 좋을 것이다 as Employee
를 사용하는 것보다 :
var options = (from Employee e in m_Employees
select e.DepartmentCode).Distinct();
또는 대안과 동등하게 그러나
var options = m_Employees.Cast<Employee>()
.Select(e => e.DepartmentCode)
.Disinct();
을, 어레이가 실제로 일 경우에만 Employee
참조 만 포함하면 원래 코드가 실패 할 것으로 기대하지 않았을 것입니다. a NullReferenceException
다음 중 하나의 값이 null 인 경우, 또는입니다. 이는 비 Employee 오브젝트에 대한 널이 아닌 참조였습니다. 이것들은 여전히 위의 코드에서 둘 다 오류를 발생 시키지만, 여전히 NullReferenceException
또는 InvalidCastException
중 어떤 것이 있는지 여부에 따라 어느 것을 볼 수 있습니다.
조건부로 결과를 사용할 때는 일반적으로 as
만 사용해야합니다. 인 경우 모든 값은 실제로 올바른 유형입니다. 대신 캐스트를 사용해야합니다. 잘못하면 null 참조를 전파하는 대신 예외가 발생합니다. 코드의 나머지 부분은 나중에 해를 입히고 오류의 원인을 찾기 어렵게 만듭니다.
컴파일 타임 오류가 발생하면 어떤 예외가 있었는지에 따라 여러 가지 원인이있을 수 있습니다.
편집 : 좋아, 그래서 IEnumerable
컴파일 시간 오류가 발생했습니다 ...Cast<T>()
및 OfType<T>()
은 IEnumerable<T>
대신에 단지 IEnumerable
에있는 확장 방법입니다.
어떤 오류를? 런타임 또는 컴파일 시간? –