C# 팁: ExpandoObject를 IDictionary로 변환
ExpandoObjects
는 사전 정의된 모양 없이 동적으로 채워진 개체입니다.dynamic myObj = new ExpandoObject();
myObj.Name ="Davide";
myObj.Age = 30;
Name
및 Age
는 ExpandoObject
정의의 일부가 아닙니다. 유형을 선언하지 않고 추가한 두 개의 필드입니다.이것은 동적 개체이므로 원하는 대로 새 필드를 추가할 수 있습니다. 내 도시를 추가해야 한다고 가정해 보겠습니다. 간단히 사용할 수 있습니다.
myObj.City = "Turin";
ExpandoObject
클래스에 필드를 만들지 않고.지금: 어떻게 모든 값을 검색할 수 있습니까? 아마도 가장 좋은 방법은
ExpandoObject
를 Dictionary
로 변환하는 것입니다.새 사전 만들기
IDictionary
를 사용하면 객체의 키에 쉽게 액세스할 수 있습니다.변경되지 않는
ExpandoObject
가 있는 경우 이를 사용하여 새 IDictionary
를 만들 수 있습니다.dynamic myObj = new ExpandoObject();
myObj.Name ="Davide";
myObj.Age = 30;
IDictionary<string, object?> dict = new Dictionary<string, object?>(myObj);
//dict.Keys: [Name, Age]
myObj.City ="Turin";
//dict.Keys: [Name, Age]
ExpandoObject
를 사용하여 새 IDictionary
를 만듭니다. 즉, 사전 생성 후 ExpandoObject
에 새 필드를 추가하면 해당 새 필드가 사전에 표시되지 않습니다.IDictionary로 캐스트
IDictionary를 사용하여
ExpandoObject
키를 가져오고 ExpandoObject
상태와 동기화 상태를 유지해야 하는 경우 해당 개체를 IDictionary로 캐스팅하기만 하면 됩니다.dynamic myObj = new ExpandoObject();
myObj.Name ="Davide";
myObj.Age = 30;
IDictionary<string, object?> dict = myObj;
//dict.Keys: [Name, Age]
myObj.City ="Turin";
//dict.Keys: [Name, Age, City]
이것은
ExpandoObject
가 IDictionary
를 구현하기 때문에 작동하므로 새 개체를 인스턴스화하지 않고 IDictionary로 간단히 캐스팅할 수 있습니다.다음은 클래스 정의입니다.
public sealed class ExpandoObject :
IDynamicMetaObjectProvider,
IDictionary<string, object?>,
ICollection<KeyValuePair<string, object?>>,
IEnumerable<KeyValuePair<string, object?>>,
IEnumerable,
INotifyPropertyChanged
마무리
두 접근 방식 모두 정확합니다. 둘 다 동일한
Dictionary
를 생성하지만 새 값이 ExpandoObject
에 추가될 때 다르게 작동합니다.각 접근 방식의 장단점을 생각해 볼 수 있습니까?
즐거운 코딩하세요!
🐧
Reference
이 문제에 관하여(C# 팁: ExpandoObject를 IDictionary로 변환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bellonedavide/c-tip-convert-expandoobjects-to-idictionary-1lp3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)