Tôi có thiết lập hoạt động không được đánh máy mạnh và dựa vào sự phản chiếu.Biểu thức lambda là thuộc tính
Tôi có một lớp học, nói
class Person{
public string FirstName {get ; set;}
public string LastName {get; set;}
public int Age {get; set;}
...
// some more public properties
}
và
class CellInfo {
public string Title {get; set;}
public string FormatString {get; set;}
}
và tôi có một cuốn từ điển như thế này
Dictionary<string, CellInfo> fields = new Dictionary<string, CellInfo>();
fields.Add("FirstName", new CellInfo {Title = "First Name", FormatString = "Foo"});
fields.Add("LastName", new CellInfo {Title = "Last Name", FormatString = "Bar"});
Đó là một từ điển đơn giản với tên bất động sản và một số thông tin về chúng. tôi vượt qua từ điển khác mô-đun xử lý các trường hợp người và tôi làm
Dictionary<string, CellInfo> fields = SomeMethodToGetDictionary();
foreach(Person p in someCollection)
{
foreach(var field in fields)
{
object cellValue = type(Person).GetProperty(field.Key).GetValue(p, null);
// use cellValue and info on field from field.Value somewhere.
...
}
}
Phương pháp này đi qua các chuỗi cho tên trường và sử dụng phản ánh hoạt động, nhưng tôi đã tự hỏi nếu có một phương pháp mạnh mẽ, đánh máy làm điều này.
gì tôi nghĩ trong đầu đã có một tài sản đó được lưu trữ một biểu thức LINQ, một cái gì đó như thế này
fields.Add("FirstName", new CellInfo
{
Title = "First Name",
FormatString = "Foo",
EvalExpression = p => p.FirstName
});
và trong quá trình sử dụng, bằng cách nào đó sử dụng EvalExpression
trên một đối tượng người và nhận được giá trị tài sản. Tôi không có đầu mối bắt đầu từ đâu hoặc cú pháp sẽ như thế nào để có một tài sản như thế này có thể đánh giá được. Tôi mới làm quen với các đại biểu và biểu thị cây mà tôi thậm chí không biết từ khóa phù hợp để tìm kiếm. Hy vọng mô tả của tôi là rõ ràng; nếu không, hãy cho tôi biết và tôi sẽ chi tiết khi cần thiết. Mọi hỗ trợ sẽ được đánh giá cao.
Bất cứ ai quan tâm đến c bỏ sót tại sao downvote? – Aliostad
Nó có thể là lệnh (trái ngược với yêu cầu) trên dòng đầu tiên. – MikeKulls