> 백엔드 개발 > C++ > C#에서 해당 범위 외부의 익명 유형 개체에 어떻게 액세스할 수 있습니까?

C#에서 해당 범위 외부의 익명 유형 개체에 어떻게 액세스할 수 있습니까?

DDD
풀어 주다: 2024-12-29 22:01:25
원래의
762명이 탐색했습니다.

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

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿