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

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

Barbara Streisand
Barbara Streisand원래의
2025-01-04 18:48:39399검색

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

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

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