首页 \ 问答 \ lambda表达式作为属性(lambda Expression as a property)

lambda表达式作为属性(lambda Expression as a property)

我有一个工作设置,它不是强类型的,而是依赖于反射。

说,我有一堂课

class Person{

    public string FirstName {get ; set;}
    public string LastName {get; set;}
    public int Age {get; set;}
    ...  
    // some more public properties
}

class CellInfo {
     public string Title {get; set;}
     public string FormatString {get; set;}
}

我有这样的字典

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"});

这是一个简单的字典,其中包含属性名称和一些关于它们的信息 我将字典传递给处理Person实例的另一个模块,而我也是如此

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.
       ...
    }
 }

这种传递字段名称和使用反射的字符串的方法可行,但我想知道是否有强制类型的方法。

我想到的是有一个存储linq表达式的属性,就像这样

fields.Add("FirstName", new CellInfo 
                   {
                      Title = "First Name", 
                      FormatString = "Foo",
                      EvalExpression = p => p.FirstName
                   });

并在使用过程中,以某种方式在人物对象上使用EvalExpression并获取属性值。 我不知道从哪里开始,或者有什么样的语法可以让这样的属性可以评估。 我很新的功能代表和表达式树,我甚至不知道正确的关键字来搜索。 希望我的描述很明确; 如果没有,请告诉我,我会在必要时提供详情。 任何援助将不胜感激。


I have a working setup which is not strongly typed and relies on reflection.

I have a class, say

class Person{

    public string FirstName {get ; set;}
    public string LastName {get; set;}
    public int Age {get; set;}
    ...  
    // some more public properties
}

and

class CellInfo {
     public string Title {get; set;}
     public string FormatString {get; set;}
}

and I have a dictionary like this

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"});

It's a simple dictionary with property Names and some info about them. I pass the dictionary to another module that processes Person instances and I do

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.
       ...
    }
 }

This method of passing the string for field name and using reflection works, but I was wondering if there is a strongly-typed method of doing this.

What I had in mind was having a property that stored a linq expression, something like this

fields.Add("FirstName", new CellInfo 
                   {
                      Title = "First Name", 
                      FormatString = "Foo",
                      EvalExpression = p => p.FirstName
                   });

and during usage, somehow use the EvalExpression on a person object and get the property value. I have no clue where to begin or what the syntax would be like to have a property like this that's evaluateable. I'm new to function delegates and expression trees that I don't even know the right keywords to search for. Hope my description is clear; if not, let me know and I'll details as necessary. Any assistance would much appreciated.


原文:https://stackoverflow.com/questions/7527536
更新时间:2022-09-01 10:09

最满意答案

你是否试图在测试浏览器中显示额外的测试特性? 如果是这样,则可以使用Visual Studio 2012 Update 1中添加的“按特性分组”(详情请参阅http://blogs.msdn.com/b/somasegar/archive/2012/11/26/visual-studio -2012-update-1-now-available.aspx ,从http://www.microsoft.com/en-us/download/details.aspx?id=35774下载)。

总之,你可以用类似的东西装饰你的测试

    [TestMethod]
    [TestCategory("SpecialTestType")]
    [TestProperty("XXX","YYY")]
    public void TestMethod1()
    {
    }

一旦再次发现此测试,请选择“按特性分组”(TextExplorer工具窗口中的工具栏)根据您的特征对测试进行分组(例如,SpecialTestType,XXX)。


Console.WriteLine did the job... The user can click on 'output' and sees the output...

相关问答

更多

相关文章

更多

最新问答

更多
  • 获取MVC 4使用的DisplayMode后缀(Get the DisplayMode Suffix being used by MVC 4)
  • 如何通过引用返回对象?(How is returning an object by reference possible?)
  • 矩阵如何存储在内存中?(How are matrices stored in memory?)
  • 每个请求的Java新会话?(Java New Session For Each Request?)
  • css:浮动div中重叠的标题h1(css: overlapping headlines h1 in floated divs)
  • 无论图像如何,Caffe预测同一类(Caffe predicts same class regardless of image)
  • xcode语法颜色编码解释?(xcode syntax color coding explained?)
  • 在Access 2010 Runtime中使用Office 2000校对工具(Use Office 2000 proofing tools in Access 2010 Runtime)
  • 从单独的Web主机将图像传输到服务器上(Getting images onto server from separate web host)
  • 从旧版本复制文件并保留它们(旧/新版本)(Copy a file from old revision and keep both of them (old / new revision))
  • 西安哪有PLC可控制编程的培训
  • 在Entity Framework中选择基类(Select base class in Entity Framework)
  • 在Android中出现错误“数据集和渲染器应该不为null,并且应该具有相同数量的系列”(Error “Dataset and renderer should be not null and should have the same number of series” in Android)
  • 电脑二级VF有什么用
  • Datamapper Ruby如何添加Hook方法(Datamapper Ruby How to add Hook Method)
  • 金华英语角.
  • 手机软件如何制作
  • 用于Android webview中图像保存的上下文菜单(Context Menu for Image Saving in an Android webview)
  • 注意:未定义的偏移量:PHP(Notice: Undefined offset: PHP)
  • 如何读R中的大数据集[复制](How to read large dataset in R [duplicate])
  • Unity 5 Heighmap与地形宽度/地形长度的分辨率关系?(Unity 5 Heighmap Resolution relationship to terrain width / terrain length?)
  • 如何通知PipedOutputStream线程写入最后一个字节的PipedInputStream线程?(How to notify PipedInputStream thread that PipedOutputStream thread has written last byte?)
  • python的访问器方法有哪些
  • DeviceNetworkInformation:哪个是哪个?(DeviceNetworkInformation: Which is which?)
  • 在Ruby中对组合进行排序(Sorting a combination in Ruby)
  • 网站开发的流程?
  • 使用Zend Framework 2中的JOIN sql检索数据(Retrieve data using JOIN sql in Zend Framework 2)
  • 条带格式类型格式模式编号无法正常工作(Stripes format type format pattern number not working properly)
  • 透明度错误IE11(Transparency bug IE11)
  • linux的基本操作命令。。。