C#에서 범위를 넘어서는 익명 형식 개체에 액세스
선언된 범위 밖에서 익명 형식 멤버에 액세스하면 특히 다음과 같은 경우 C#에서 문제가 발생할 수 있습니다. 메소드 간에 데이터 전송을 시도 중입니다. 다음 코드를 고려하십시오.
void FuncB() { var obj = FuncA(); Console.WriteLine(obj.Name); } FuncA() { var a = (from e in DB.Entities where e.Id == 1 select new {Id = e.Id, Name = e.Name}).FirstOrDefault(); return a; }
안타깝게도 이 코드는 obj가 FuncA() 외부에서 더 이상 액세스할 수 없기 때문에 오류를 발생시킵니다.
주의 접근 방식
일반적으로 해당 범위를 벗어나는 익명 유형 개체에 액세스하지 않는 것이 좋습니다. 이렇게 하면 코드가 혼란스러워지고 오류가 발생할 수 있습니다. 그러나 해당 범위 밖의 익명 유형 개체에 액세스해야 하는 경우 "cast by example"이라는 해결 방법이 있습니다.
The Cast by example Hack
이것은 기술에는 CastByExample 메서드를 사용하여 익명 형식 개체를 원하는 형식으로 캐스팅하는 작업이 포함됩니다. 예는 다음과 같습니다.
public void FuncB() { var example = new { Id = 0, Name = string.Empty }; var obj = CastByExample(FuncA(), example); Console.WriteLine(obj.Name); } private object FuncA() { var a = from e in DB.Entities where e.Id == 1 select new { Id = e.Id, Name = e.Name }; return a.FirstOrDefault(); } private T CastByExample<T>(object target, T example) { return (T)target; }
예제 객체를 제공하면 CastByExample()이 올바른 유형을 추론하고 대상 객체를 해당 유형으로 캐스팅할 수 있습니다.
주의
캐스트 바이 예제 기법이 유용할 수 있지만 주의해서 사용해야 합니다. 이렇게 하면 대상 개체가 제공된 예제와 일치하지 않는 경우 캐스팅 오류가 발생할 수 있습니다. 해당 범위 밖의 익명 유형 객체에 액세스하기 위한 대체 접근 방식을 항상 고려하는 것이 좋습니다.
위 내용은 C#에서 해당 범위 외부의 익명 유형 개체에 어떻게 액세스할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!