Bằng cách sử dụng phản ánh bạn có thể lấy các infos tài sản từ một đối tượng
foreach (PropertyInfo prp in obj.GetType().GetProperties()) {
if (prp.CanRead) {
object value = prp.GetValue(obj, null);
string s = value == null ? "" : value.ToString();
string name = prp.Name;
...
}
}
Phương pháp GetProperties
có tình trạng quá tải chấp nhận BindingFlags
thông qua đó bạn có thể xác định loại tài sản mà bạn cần, như tin dụ/public/tĩnh .
Bạn có thể kết hợp chúng như thế này
var properties = type.GetProperties(BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.Instance);
Áp dụng cho vấn đề của bạn, bạn có thể viết
List<Person> people = ...;
Type type = typeof(Person);
PropertyInfo[] properties = type.GetProperties();
var sb = new StringBuilder();
// First line contains field names
foreach (PropertyInfo prp in properties) {
if (prp.CanRead) {
sb.Append(prp.Name).Append(';');
}
}
sb.Length--; // Remove last ";"
sb.AppendLine();
foreach (Person person in people) {
foreach (PropertyInfo prp in properties) {
if (prp.CanRead) {
sb.Append(prp.GetValue(person, null)).Append(';');
}
}
sb.Length--; // Remove last ";"
sb.AppendLine();
}
File.AppendAllText("C:\Data\Persons.csv", sb.ToString());
Nó cũng là một ý tưởng tốt để kèm theo chuỗi trong dấu ngoặc kép và để thoát khỏi đôi báo giá chúng chứa bằng cách tăng gấp đôi chúng.
Nguồn
2012-06-15 13:15:39
giá trị của cái gì? –
Câu hỏi của bạn cần nhiều nền tảng hơn và ví dụ về dữ liệu/mã để tránh bị ứng cử viên đóng cửa. –
Bạn có thể cho chúng tôi thấy những gì bạn đã thử không? – LolCat