범위 밖의 C# 익명 유형 개체에 액세스
C#에서 익명 유형은 new 키워드와 속성 이니셜라이저 세트를 사용하여 생성됩니다. 중괄호 안에. 이름을 지정하거나 추가로 정의할 필요가 없는 임시 개체를 만들어야 할 때 유용합니다. 그러나 선언된 범위 외부의 익명 유형 객체에 액세스하는 것은 어려울 수 있습니다.
문제를 이해하려면 다음 코드를 고려하세요.
void FuncB() { var obj = FuncA(); Console.WriteLine(obj.Name); } object FuncA() { var a = (from e in DB.Entities where e.Id == 1 select new { Id = e.Id, Name = e.Name }).FirstOrDefault(); return a; }
이 코드에서 FuncA() Id와 Name이라는 두 가지 속성이 있는 익명 유형을 반환합니다. 그러나 FuncB()가 Name 속성에 액세스하려고 하면 컴파일러가 FuncA()에서 반환한 익명 형식의 속성을 확인할 수 없기 때문에 오류가 발생합니다.
한 가지 잠재적인 해결 방법은 "cast by"를 사용하는 것입니다. example":
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; }
이 "cast by example" 기술에는 원하는 익명 유형의 예제 개체를 만든 다음 반환된 개체를 예제 유형으로 캐스팅하는 작업이 포함됩니다. 익명 유형 속성에 대한 액세스를 허용하지만 혼란스럽고 오류가 발생하기 쉬우므로 일반적으로 권장되지 않습니다.
위 내용은 해당 범위 외부의 C# 익명 유형 개체에 어떻게 액세스할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!