λ³Έ λ΄μ©μ CODE4ITμ C# Tip: Convert ExpandoObjects to IDictionaryμ λ΄μ©μ 보μν κΈμ λλ€.
ExpandoObject
μλ ¨λ C# κ°λ°μλΌλ ExpandoObjectλ₯Ό μ²μ λ€μκ±°λ μκΈ°λ νμ§λ§ μ¬μ©ν΄λ³΄μ§ μμμ μ μμ΅λλ€.
ExpandoObject λ dynamic
νμμ ν΅ν΄ λμ μΌλ‘ μμ±μ μΆκ°νκ³ μ¬μ©ν μ μκ² ν΄μ€λλ€.
dynamic myObj = new ExpandoObject();
myObj.Name = "Davide";
myObj.Age = 30;
myObj μΈμ€ν΄μ€λ ExpandoObject
μΈμ€ν΄μ€μ΄μ§λ§ dynamic νμμ΄λ―λ‘ μμ±μ μ‘΄μ¬ μ 무λ₯Ό μ»΄νμΌ μμ μμ νμΈνμ§ μμΌλ©° μμ±μ μ¬μ©νλ λ°νμ μμ μμ μλ‘μ΄ μμ±λͺ
μΌλ‘ κ°μ μ€μ νκ³ μ½μ μ μμ΅λλ€.
λ§μΉ νμ΄μ¬κ³Ό κ°μ λμ μΈμ΄ κ°μ§μ?
λμ μΌλ‘ μΆκ°λ μμ±μ μ΄λ»κ² μ‘°νν μ μλμ?
ExpandoObject
μΈμ€ν΄μ€λ λμ μΌλ‘ μμ±μ΄ κ³μ μΆκ°λ μ μκΈ° λλ¬Έμ μ΄λ€ μμ±μ΄ μΆκ°λμλμ§ μ‘°νκ° νμν©λλ€.
μ΄λ ExpandoObject
κ° κ΅¬νν μΈν°νμ΄μ€λ₯Ό ν΅ν΄ κ°λ₯νλ°μ
public sealed class ExpandoObject : ICollection<KeyValuePair<string, object?>>, IEnumerable<KeyValuePair<string, object?>>, IEnumerable, IDictionary<string, object?>, INotifyPropertyChanged, IDynamicMetaObjectProvider
KeyValuePair<string,object?>
μ ICollection
μΈν°νμ΄μ€ λ° IDictionary<string,object?>
μΈν°νμ΄μ€κ° ꡬνλμ΄ μκΈ° λλ¬Έμ λ€μ μ²λΌ μ¬μ©ν μ μμ΅λλ€.
using System.ComponentModel;
using System.Dynamic;
dynamic p = new ExpandoObject();
// Console.WriteLine(p.Name); // μμ§ Name μμ±μ΄ μμΌλ―λ‘ μμΈ
p.Name = "David";
p.Age = 30;
IDictionary<string, object?> dic = p;
dic["Sex"] = "Male";
Console.WriteLine(p.Sex);
foreach (var kv in p)
{
Console.WriteLine(kv);
}
| μΆλ ₯
Male
[Name, David]
[Age, 30]
[Sex, Male]
λ°μ κ°μ²΄λ‘λ μ¬μ©
ExpandoObject
λ λν INotifyPropertyChanged
μΈν°νμ΄μ€λ₯Ό ꡬνν΄μ λ€μμ²λΌ μμ±μ΄ λ³κ²½λ λ λ°μν μ μμ΅λλ€.
using System.ComponentModel;
using System.Dynamic;
dynamic p = new ExpandoObject();
(p as INotifyPropertyChanged)!.PropertyChanged += (s, e) =>
{
Console.WriteLine($"Changed Property : {e.PropertyName}");
};
// Console.WriteLine(p.Name); // μμ§ Name μμ±μ΄ μμΌλ―λ‘ μμΈ
p.Name = "David";
p.Age = 30;
IDictionary<string, object?> dic = p;
dic["Sex"] = "Male";
Console.WriteLine(p.Sex);
foreach (var kv in p)
{
Console.WriteLine(kv);
}
| μΆλ ₯
Changed Property : Name
Changed Property : Age
Changed Property : Sex
Male
[Name, David]
[Age, 30]
[Sex, Male]