>백엔드 개발 >C++ >선언된 범위 밖의 C# 익명 유형 개체에 액세스할 수 있습니까?

선언된 범위 밖의 C# 익명 유형 개체에 액세스할 수 있습니까?

DDD
DDD원래의
2024-12-28 17:17:11755검색

Can I Access C# Anonymous Type Objects Outside Their Declared Scope?

선언된 범위를 벗어난 익명 유형 개체에 액세스

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;
}

여기서는 FuncA 메서드에서 익명 유형 개체가 생성되고 obj로 반환됩니다. 그러나 FuncB 메소드에서 컴파일러는 obj에 Name에 대한 정의가 포함되어 있지 않다고 불평합니다.

선언된 범위 외부에서 익명 유형 객체의 속성에 액세스할 수 없는 이유는 무엇입니까?

익명 유형은 기본적으로 강력한 유형의 인터페이스를 구현하는 컴파일러 생성 클래스입니다. 익명 유형을 생성하면 컴파일러는 생성된 고유한 각 익명 유형에 대해 고유한 유형 이름을 생성합니다. 이러한 유형은 선언된 어셈블리에 고유하며 해당 어셈블리 외부에서 액세스할 수 없습니다.

선언된 범위 외부에서 익명 유형 개체에 액세스할 수 있습니까?

기술적으로, 예. 그러나 잠재적인 성능 저하 및 보안 문제로 인해 사용하지 않는 것이 좋습니다.

"캐스트 바이 예제"라고 알려진 한 가지 방법은 리플렉션을 사용하여 익명 형식 개체를 알려진 예제 형식으로 캐스팅하는 것입니다. 그러나 이 솔루션은 복잡하고 신뢰할 수 없으며 향후 컴파일러 변경으로 인해 중단될 수 있습니다.

public void FuncB()
{
    var example = new { Id = 0, Name = string.Empty };

    var obj = CastByExample(FuncA(), example);
    Console.WriteLine(obj.Name);
}

선언된 범위 밖에서 익명 유형 개체에 액세스하면 예상치 못한 동작이 발생할 수 있으므로 일반적으로 권장되지 않습니다. .

위 내용은 선언된 범위 밖의 C# 익명 유형 개체에 액세스할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.