Có cách nào để cung cấp tên cho hàm sau đó trả về giá trị của trường hoặc thuộc tính trên đối tượng đã cho với tên đó không? Tôi đã cố gắng để làm việc xung quanh nó với các nhà điều hành null-coalesce, nhưng dường như không thích các loại khác nhau (mà cũng là một chút lạ với tôi vì null là null). Tôi có thể tách nó ra thành nếu null, nhưng phải có một cách tốt hơn để làm điều này. Đây là chức năng của tôi, và hai dòng với các đối tượng Comparison
không biên dịch, nhưng tôi sẽ để chúng ở đó để hiển thị những gì tôi đang cố gắng làm.C# Phản ánh lấy trường hoặc thuộc tính theo tên
private void SortByMemberName<T>(List<T> list, string memberName, bool ascending)
{
Type type = typeof (T);
MemberInfo info = type.GetField(memberName) ?? type.GetProperty(memberName);
if (info == null)
{
throw new Exception("Member name supplied is neither a field nor property of type " + type.FullName);
}
Comparison<T> asc = (t1, t2) => ((IComparable) info.GetValue(t1)).CompareTo(info.GetValue(t2));
Comparison<T> desc = (t1, t2) => ((IComparable) info.GetValue(t2)).CompareTo(info.GetValue(t1));
list.Sort(ascending ? asc : desc);
}
Tôi đã nghe nói về một thứ gọi là LINQ động có thể được sử dụng, nhưng vì lợi ích của việc học, tôi đang làm theo cách của tôi.
Toán tử kết hợp không hợp lệ không hoạt động vì 'FieldInfo' không phải là' PropertyInfo'. Sử dụng 'as' để truyền chúng. – FlyingStreudel