C #에서 자체 동적 형식 또는 동적 개체를 만드는 방법은 무엇입니까?
예를 들어 클래스의 ViewBag 속성이 ControllerBase
있으며 값을 동적으로 가져 오거나 설정할 수 있으며이 객체에 여러 추가 필드 또는 속성을 추가 할 수 있습니다 .MVC 응용 프로그램 및 Controller
클래스 이외의 다른 것을 사용하고 싶습니다. 응용 프로그램의 유형. 동적 객체 를 생성 하고 아래와 같이 속성을 설정 하려고 할 때
1. dynamic MyDynamic = new { A="a" };
2. MyDynamic.A = "asd";
3. Console.WriteLine(MyDynamic.A);
내가있어 RuntimeBinderException
메시지와 함께 건물 또는 인덱서 '<> f__AnonymousType0.A'에 할당 할 수 없습니다 - 그것은 읽기 전용입니다 또한 내가 그것은 내가 찾고-에 대한있어 매우 게 아니에요 제안 라인 2에. 어쩌면 다음과 같은 일을 할 수있는 수업이 있습니까?
??? MyDynamic = new ???();
MyDynamic.A = "A";
MyDynamic.B = "B";
MyDynamic.C = DateTime.Now;
MyDynamic.TheAnswerToLifeTheUniverseAndEverything = 42;
동적 추가 및 설정 속성.
dynamic MyDynamic = new System.Dynamic.ExpandoObject();
MyDynamic.A = "A";
MyDynamic.B = "B";
MyDynamic.C = "C";
MyDynamic.Number = 12;
MyDynamic.MyMethod = new Func<int>(() =>
{
return 55;
});
Console.WriteLine(MyDynamic.MyMethod());
ExpandoObject 클래스 및 추가 샘플 에 대해 자세히 알아보십시오 . 런타임시 멤버를 동적으로 추가 및 제거 할 수있는 오브젝트를 나타냅니다.
ExpandoObject
당신이 찾고있는 것입니다.
dynamic MyDynamic = new ExpandoObject(); // note, the type MUST be dynamic to use dynamic invoking.
MyDynamic.A = "A";
MyDynamic.B = "B";
MyDynamic.C = "C";
MyDynamic.TheAnswerToLifeTheUniverseAndEverything = 42;
최근에 한 단계 더 나아가서 사용자 정의 항목을 기반으로 동적 객체에서 동적으로 속성을 추가해야했습니다. 여기 및 Microsoft의 ExpandoObject 문서 의 예제 는 속성 추가를 구체적으로 다루지 않지만 속성을 열거하고 삭제하는 방법에서 추측 할 수 있습니다. 어쨌든, 나는 이것이 누군가에게 도움이 될 것이라고 생각했습니다. 다음은 키워드 및 기타 처리를 무시하고 ExpandoObject에 진정한 동적 속성을 추가하는 방법에 대한 매우 단순화 된 버전입니다.
// my pretend dataset
List<string> fields = new List<string>();
// my 'columns'
fields.Add("this_thing");
fields.Add("that_thing");
fields.Add("the_other");
dynamic exo = new System.Dynamic.ExpandoObject();
foreach (string field in fields)
{
((IDictionary<String, Object>)exo).Add(field, field + "_data");
}
// output - from Json.Net NuGet package
textBox1.Text = Newtonsoft.Json.JsonConvert.SerializeObject(exo);
네임 스페이스에 ExpandoObject Class
있는 것을 사용할 수 있습니다 System.Dynamic
.
dynamic MyDynamic = new ExpandoObject();
MyDynamic.A = "A";
MyDynamic.B = "B";
MyDynamic.C = "C";
MyDynamic.SomeProperty = SomeValue
MyDynamic.number = 10;
MyDynamic.Increment = (Action)(() => { MyDynamic.number++; });
자세한 정보는 ExpandoObject MSDN 에서 찾을 수 있습니다.
dynamic MyDynamic = new ExpandoObject();
참고 URL : https://stackoverflow.com/questions/12709333/how-to-create-own-dynamic-type-or-dynamic-object-in-c
'Programing' 카테고리의 다른 글
클래스의 파이썬 데코레이터 (0) | 2020.07.12 |
---|---|
TypeError : Python에서 'NoneType'객체를 반복 할 수 없습니다 (0) | 2020.07.12 |
JavaScript에서 정수 범위 설정 (0) | 2020.07.12 |
Bash에서 do-while 루프 에뮬레이션 (0) | 2020.07.12 |
페이지로드시 스크롤하여 ID로 애니메이션 (0) | 2020.07.12 |