2017-04-11 4 views
0

내가 예를 들어 문자열 매개 변수를 기반으로 익명 형식을 만들려고 해요 기반의 동적/익명 형식을 만듭니다, 매개 변수

var propertyName = "Firstname"; 
var properyValue = "Fred"; 
내가 얻을 수 있도록하고 싶습니다

;

var myObj = new { FirstName = "Fred" }; 

또한 동일한 기능을 사용하는 데있어서;

var propertyName = "Surname"; 
var properyValue = "Smith"; 
var myObj = new { Surname = "Smith" }; 

실제로 가능합니까?

+0

[ExpandoObject] (https://blogs.msdn.microsoft.com/csharpfaq/2009/09/30/dynamic-in-c-4-0-introducing-the-expandoobject/)를 찾으십니까? –

+3

무엇? 당신이 원하는 것을 분명히하지 마십시오 ...'Dictionary '을 사용하여 행복하게 살 수 있습니다. – xanatos

+0

아마도'ExpandoObject'를 보 겠지만, 왜 그렇게하고 싶습니까? 아마도 [XY 문제] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)가있을 수 있습니다. – juharr

답변

1

익명 형식은 컴파일시 정의됩니다. 그것들은 이름이없는 일반적인 C# 유형입니다 [1]. 따라서 런타임 정보를 기반으로 구조를 수정할 수 없습니다.

익명 유형을 전혀 원하지 않는 것처럼 보입니다. ExpandoObject 소리가 원하는대로 들립니다. 익명 형식은 해당 범위에서 누설되어서는 안됩니다. 그리고이를 따르는 경우 수행하려는 것처럼 동적으로 구성 할 필요가 없습니다.

또한 익명 형식을 사용할 때는주의해야합니다. 메소드 인자 및 리턴 타입으로 사용할 수없는 이유가 있습니다. 이는 그것이 설계된 것이 아니기 때문입니다. dynamic을 사용하여이 제한 사항을 우회하고있는 것으로 보이지만 많은 문제가 있습니다. .NET의 모든 릴리스 (핫픽스 포함)에서 작동을 멈출 수 있으며 현재 .NET에서는 익명 형식이 누설 될 경우 액세스 가능성 오류가 발생합니다 (예 : internal 익명 형식이 다른 형식으로 사용됨). 어셈블리).

[1] 물론 실제로는 입니다.에는 이름이 있습니다. CLR에는 형식에 이름이 필요하기 때문입니다. 그러나이 이름은 자동 생성되고 다소 숨겨져 있으며 사용자가 고려해야 할 사항이 아닙니다.