C# c语言中的动作方法#

C# c语言中的动作方法#,c#,methods,reflection,action,C#,Methods,Reflection,Action,我只想让他告诉我入口处发生了什么变化。当我希望在select方法的输入中获得相同的值时,我希望在action输出中获得相同的值,而不是整个properties类WeatherForecast public class WeatherForecast { public DateTime Date { get; set; } public int TemperatureC { get; set; } public int TemperatureF => 32 + (i

我只想让他告诉我入口处发生了什么变化。当我希望在select方法的输入中获得相同的值时,我希望在action输出中获得相同的值,而不是整个properties类WeatherForecast

 public class WeatherForecast
{
    public DateTime Date { get; set; }
    public int TemperatureC { get; set; }
    public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
    public string Summary { get; set; }
}


 public void method(){
        Select(d=>
        {
            d.Summary = "dasd";
            d.TemperatureC = 25;
        });}

 private void Select(Action<WeatherForecast> func)
    {
        var result = new WeatherForecast();
     
        func(result);
        foreach (var item in result.GetType().GetProperties())
        {
            RaisePropertyChanged(item.Name);
        }
        var ss = func;
        
    }
公共类天气预报
{
公共日期时间日期{get;set;}
public int TemperatureC{get;set;}
公共内部温度F=>32+(内部)(温度C/0.5556);
公共字符串摘要{get;set;}
}
公开作废法(){
选择(d=>
{
d、 Summary=“dasd”;
d、 温度c=25;
});}
专用无效选择(操作功能)
{
var结果=新天气预报();
func(结果);
foreach(result.GetType().GetProperties()中的变量项)
{
RaisePropertyChanged(项目名称);
}
var ss=func;
}

''

基本上,这不是一件你可以做的小事。您可以在这里使用三种通用方法:

  • 将更改跟踪添加到
    WeatherForecast
    类型中,这样它就知道发生了什么更改(通常使用某种重置方法将所有内容标记为未更改,并在每个setter中编码以将单个属性记录为已更改)
  • 使用外部更改跟踪器,以某种方式记录shapshot中的原始状态,然后稍后:将其与当前值进行比较
  • 如果使用
    表达式
    -树,则解释此处提出的更改-但是:C编译器无法将问题中的代码解释为
    表达式
    -树(即使可以生成此树的
    表达式
    -树)
  • 其中,除非你有很多空闲时间,否则只有第一个在这里是可行的。比如:

    private int\u dirtyFlags;
    public void ResetAllChanges()=>\u dirtyFlags=0;
    私人日期时间(日期);;
    公共日期时间日期
    {
    获取=>\u日期;
    设置
    {
    如果(_date!=value)_dirtyFlags |=1(_dirtyFlags&(1)temperatureC;
    设置
    {
    
    如果(_temperatureC!=value)_dirtyFlags |=1(_dirtyFlags&(1),基本上这不是一件简单的事情。这里可以使用三种常用方法:

  • 将更改跟踪添加到
    WeatherForecast
    类型中,这样它就知道发生了什么更改(通常使用某种重置方法将所有内容标记为未更改,并在每个setter中编码以将单个属性记录为已更改)
  • 使用外部更改跟踪器,以某种方式记录shapshot中的原始状态,然后稍后:将其与当前值进行比较
  • 如果使用
    表达式
    -树,则解释此处提出的更改-但是:C编译器无法将问题中的代码解释为
    表达式
    -树(即使可以生成此树的
    表达式
    -树)
  • 其中,除非你有很多空闲时间,否则在这里只有第一种方法是可行的。比如:

    private int\u dirtyFlags;
    public void ResetAllChanges()=>\u dirtyFlags=0;
    私人日期时间(日期);;
    公共日期时间日期
    {
    获取=>\u日期;
    设置
    {
    如果(_date!=value)_dirtyFlags |=1(_dirtyFlags&(1)temperatureC;
    设置
    {
    
    如果(_temperatureC!=value)_dirtyFlags |=1(_dirtyFlags&(1)请显示a-您如何调用Select方法?我在理解问题描述时遇到困难。我在main method中调用我的Select方法,我可以尝试并解释吗?您正在寻找一种方法来发现
    Summary
    TemperatureC
    是已更改的内容,因此您只需执行
    RaiseProperty即可yChanged
    对于那些-是这样吗?我只想给出方法中修改的属性请显示a-您如何调用选择方法?我在理解问题描述时遇到困难。我在main method中调用我的选择方法我可以尝试解释吗?您正在寻找一种方法来发现
    摘要
    TemperatureC
    是已更改的内容,因此您只需对这些内容执行
    RaisePropertyChanged
    ,对吗?我只想在方法中给出修改后的属性