Làm cách nào để có danh sách tất cả các thuộc tính của một lớp?Làm thế nào để có được danh sách các thuộc tính của một lớp học?
Trả lời
Phản ánh; cho một ví dụ:
obj.GetType().GetProperties();
cho một loại:
typeof(Foo).GetProperties();
ví dụ:
class Foo {
public int A {get;set;}
public string B {get;set;}
}
...
Foo foo = new Foo {A = 1, B = "abc"};
foreach(var prop in foo.GetType().GetProperties()) {
Console.WriteLine("{0}={1}", prop.Name, prop.GetValue(foo, null));
}
Sau phản hồi ...
- Để có được val ue thuộc tính tĩnh, vượt qua
null
làm đối số đầu tiên choGetValue
- Để xem các thuộc tính không công khai, hãy sử dụng (ví dụ)
GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
(trả về tất cả các thuộc tính cá nhân công khai/riêng tư).
Để hoàn chỉnh, đó cũng là ComponentModel, tiếp xúc bởi TypeDescriptor.GetProperties (...) - cho phép tính thời gian chạy động (phản ánh được cố định ở compile- thời gian). –
Đề xuất: Mở rộng câu trả lời để bao gồm thuộc tính được bảo vệ/riêng tư/tĩnh/kế thừa. – Richard
Tuyên bố foreach bạn hiển thị ngay cả các tác phẩm từ bên trong lớp bạn muốn nhận các thuộc tính của :) –
Bạn có thể sử dụng phản chiếu.
Type typeOfMyObject = myObject.GetType();
PropertyInfo[] properties =typeOfMyObject.GetProperties();
Bạn có thể sử dụng Reflection để làm điều này: (từ thư viện của tôi - điều này được các tên và giá trị)
public static Dictionary<string, object> DictionaryFromType(object atype)
{
if (atype == null) return new Dictionary<string, object>();
Type t = atype.GetType();
PropertyInfo[] props = t.GetProperties();
Dictionary<string, object> dict = new Dictionary<string, object>();
foreach (PropertyInfo prp in props)
{
object value = prp.GetValue(atype, new object[]{});
dict.Add(prp.Name, value);
}
return dict;
}
điều này sẽ không làm việc cho các thuộc tính với một chỉ số - cho rằng (nó trở nên khó sử dụng):
public static Dictionary<string, object> DictionaryFromType(object atype,
Dictionary<string, object[]> indexers)
{
/* replace GetValue() call above with: */
object value = prp.GetValue(atype, ((indexers.ContainsKey(prp.Name)?indexers[prp.Name]:new string[]{});
}
Ngoài ra, để chỉ nhận các thuộc tính công khai: (see MSDN on BindingFlags enum)
/* replace */
PropertyInfo[] props = t.GetProperties();
/* with */
PropertyInfo[] props = t.GetProperties(BindingFlags.Public)
Điều này cũng hoạt động trên các loại ẩn danh!
Để chỉ nhận được những cái tên:
public static string[] PropertiesFromType(object atype)
{
if (atype == null) return new string[] {};
Type t = atype.GetType();
PropertyInfo[] props = t.GetProperties();
List<string> propNames = new List<string>();
foreach (PropertyInfo prp in props)
{
propNames.Add(prp.Name);
}
return propNames.ToArray();
}
Và nó chỉ là về giống cho chỉ các giá trị, hoặc bạn có thể sử dụng:
GetDictionaryFromType().Keys
// or
GetDictionaryFromType().Values
Nhưng đó là chậm hơn một chút, tôi sẽ tưởng tượng.
... nhưng atype.GetProperty (prp.Name) sẽ trả lại prp? –
Ồ - bạn nói đúng! D'oh. –
Tôi đã sửa lỗi đó ngay bây giờ. –
Bạn có thể sử dụng không gian tên System.Reflection
với Type.GetProperties()
mehod:
PropertyInfo[] propertyInfos;
propertyInfos = typeof(MyClass).GetProperties(BindingFlags.Public|BindingFlags.Static);
Tôi cũng phải đối mặt với loại này yêu cầu.
Từ cuộc thảo luận này, tôi có ý tưởng khác,
Obj.GetType().GetProperties()[0].Name
Điều này cũng được thể hiện tên thuộc tính.
Obj.GetType().GetProperties().Count();
số hiển thị thuộc tính này.
Cảm ơn tất cả.Đây là cuộc thảo luận tốt đẹp.
public List<string> GetPropertiesNameOfClass(object pObject)
{
List<string> propertyList = new List<string>();
if (pObject != null)
{
foreach (var prop in pObject.GetType().GetProperties())
{
propertyList.Add(prop.Name);
}
}
return propertyList;
}
Chức năng này là để nhận danh sách Thuộc tính lớp.
Bạn có thể muốn thay đổi điều này để sử dụng 'lợi nhuận'. Nó không phải là một vấn đề lớn, nhưng đó là một cách tốt hơn để làm điều đó. –
Tôi thích điều này vì đó là (gần như) câu trả lời duy nhất không bao gồm từ * phản chiếu *. –
Tuy nhiên, điều này vẫn ** sử dụng ** phản ánh tuy nhiên. – GGG
Đó là giải pháp của tôi
public class MyObject
{
public string value1 { get; set; }
public string value2 { get; set; }
public PropertyInfo[] GetProperties()
{
try
{
return this.GetType().GetProperties();
}
catch (Exception ex)
{
throw ex;
}
}
public PropertyInfo GetByParameterName(string ParameterName)
{
try
{
return this.GetType().GetProperties().FirstOrDefault(x => x.Name == ParameterName);
}
catch (Exception ex)
{
throw ex;
}
}
public static MyObject SetValue(MyObject obj, string parameterName,object parameterValue)
{
try
{
obj.GetType().GetProperties().FirstOrDefault(x => x.Name == parameterName).SetValue(obj, parameterValue);
return obj;
}
catch (Exception ex)
{
throw ex;
}
}
}
đây được cải thiện @lucasjones trả lời. Tôi đã bao gồm các cải tiến được đề cập trong phần bình luận sau câu trả lời của anh ấy. Tôi hy vọng ai đó sẽ thấy điều này hữu ích.
public static string[] GetTypePropertyNames(object classObject, BindingFlags bindingFlags)
{
if (classObject == null)
{
throw new ArgumentNullException(nameof(classObject));
}
var type = classObject.GetType();
var propertyInfos = type.GetProperties(bindingFlags);
return propertyInfos.Select(propertyInfo => propertyInfo.Name).ToArray();
}
Dựa trên câu trả lời của @ MarcGravell, đây là phiên bản hoạt động trong Unity C#.
ObjectsClass foo = this;
foreach(var prop in foo.GetType().GetProperties()) {
Debug.Log("{0}={1}, " + prop.Name + ", " + prop.GetValue(foo, null));
}
- 1. Làm thế nào để tạo danh sách bằng Python khác biệt dựa trên thuộc tính của lớp trong danh sách?
- 2. Làm thế nào để sắp xếp một bộ sưu tập danh sách các lớp với các thuộc tính trong chúng?
- 3. Làm thế nào để thêm các thuộc tính để tính một lớp cơ sở của
- 4. jQuery - nhận danh sách các giá trị thuộc tính từ các thành phần của một lớp
- 5. Làm thế nào để có được tên của một tài sản lớp học?
- 6. Danh sách các thuộc tính lớp trong Objective-C
- 7. Làm thế nào để Nhận thuộc tính danh sách từ ArrayList của các đối tượng
- 8. Java: Bắt các thuộc tính của một lớp học để xây dựng một chuỗi đại diện
- 9. Làm cách nào để chuyển Danh sách lớp học sang Danh sách Giao diện?
- 10. AppleScript: Lấy danh sách tất cả các thuộc tính của một đối tượng hoặc lớp
- 11. Các lớp học có các thuộc tính '__dict__' mặc định của họ từ đâu?
- 12. Danh sách các lớp học trong một tệp jar
- 13. Làm cách nào để lưu trữ danh sách thuộc tính (không phải giá trị của chúng)?
- 14. Làm thế nào để lặp qua tất cả các thuộc tính của một lớp?
- 15. Làm thế nào để có được tất cả các thuộc tính tĩnh và các giá trị của một lớp học sử dụng phản ánh
- 16. Danh sách Thuộc tínhGrid Các thuộc tính
- 17. Làm thế nào để có được một chìa khóa ModelState của một mục trong danh sách
- 18. Làm cách nào để thêm thuộc tính vào lớp bằng trình trang trí có danh sách tên làm đối số?
- 19. Làm thế nào để có được danh sách các lớp học bắt nguồn từ một lớp nhất định, với RTTI nâng cao?
- 20. Làm thế nào để trích xuất từ một danh sách các đối tượng một danh sách các thuộc tính cụ thể?
- 21. Làm thế nào để thiết kế sự phụ thuộc của lớp học để tránh Luật Demeter
- 22. Làm thế nào để có được một danh sách đầy đủ các phương pháp và các thuộc tính của đối tượng?
- 23. Scala: Làm thế nào để có được lớp học của thành phần mixin?
- 24. Làm thế nào để có được các thuộc tính theo thứ tự chúng được khai báo trong một lớp Python?
- 25. Làm thế nào để tiêm phụ thuộc vào các lớp học thực hiện một giao diện?
- 26. Danh sách các thuộc tính .NET
- 27. Danh sách các đối tượng có thuộc tính duy nhất
- 28. Làm thế nào để lặp qua một thuộc tính của một lớp, theo thứ tự chúng đã được xác định?
- 29. C#: Làm thế nào để chuyển đổi danh sách các đối tượng thành danh sách một thuộc tính duy nhất của đối tượng đó?
- 30. Làm thế nào để có được tên của một lớp của một phương thức như NSString?
@Sukesh, hãy đánh dấu một trong những câu trả lời như câu trả lời – K48