Trong C# 3.0 bạn có thể tạo lớp vô danh với cú pháp sauLàm thế nào để năng động lớp vô danh mới?
var o1 = new { Id = 1, Name = "Foo" };
Có cách nào để động tạo ra những lớp vô danh với một biến?
Ví dụ:
var o1 = new { Id = 1, Name = "Foo" };
var o2 = new { SQ = 2, Birth = DateTime.Now };
động tạo Ví dụ:
var o1 = DynamicNewAnonymous(new NameValuePair("Id", 1), new NameValuePair("Name", "Foo"));
var o2 = DynamicNewAnonymous(new NameValuePair("SQ", 2), new NameValuePair("Birth",
DateTime.Now));
bởi vì tôi cần phải làm:
dynamic o1 = new ExpandObject();
o1."ID" = 1; <--"ID" is dynamic name
o1."Name" = "Foo"; <--"Name" is dynamic name
Và Scene 1:
void ShowPropertiesValue(object o)
{
Type oType = o.GetType();
foreach(var pi in oType.GetProperties())
{
Console.WriteLine("{0}={1}", pi.Name, pi.GetValue(o, null));
}
}
nếu tôi gọi:
dynamic o1 = new ExpandObject();
o1.Name = "123";
ShowPropertiesValue(o1);
Nó không thể hiển thị kết quả:
Name = 123
Và tôi cũng làm thế nào để Chuyển đổi ExpandoObject để AnonymouseType?
Type type = o1.GetType();
type.GetProperties(); <--I hope it can get all property of o1
ngoái, tôi thay đổi phương pháp ShowPropertiesValue()
void ShowPropertiesValue(object o)
{
if(o is static object) <--How to check it is dynamic or static object?
{
Type oType = o.GetType();
foreach(var pi in oType.GetProperties())
{
Console.WriteLine("{0}={1}", pi.Name, pi.GetValue(o, null));
}
}
else if(o is dynamic object) <--How to check it is dynamic or static object?
{
foreach(var pi in ???) <--How to get common dynamic object's properties info ?
{
Console.WriteLine("{0}={1}", pi.Name, pi.GetValue(o, null));
}
}
}
Làm thế nào để thực hiện phương pháp DynamicNewAnonymous hoặc làm thế nào để thay đổi ShowPropertiesValue()?
động cơ của tôi là:
dynamic o1 = new MyDynamic();
o1.Name = "abc";
Type o1Type = o1.GetType();
var props = o1Type.GetProperties(); <--I hope can get the Name Property
Nếu tôi có thể treo GetType Phương pháp dynamicObject, và bắt buộc chuyển đổi để mạnh mẽ-gõ Loại. Mã liền mạch ở trên có thể hoạt động tốt.
@Vlad: Tôi thừa nhận tôi có chút không rõ ràng về động cơ. –
@VladLazarenko Tôi nghĩ bạn đúng :-) – oberfreak
Hãy cho chúng tôi biết, bạn muốn làm gì và tại sao đây là giải pháp bạn đã chọn. – oberfreak