在 C#9 和 c#10 中编写属性的最简单和最简洁的形式

     2023-03-31     247

关键词:

【中文标题】在 C#9 和 c#10 中编写属性的最简单和最简洁的形式【英文标题】:simplest and most concise form to write a property in C#9 and c#10 【发布时间】:2021-11-10 15:23:06 【问题描述】:

考虑到 C#9 甚至 C#10 的特性,如下编写属性最简单、最简洁的形式是什么?

是否可以不使用支持字段?

string fName;
public string Name  get  return fName;  set  SetPropertyValue<string>(nameof(Name), ref fName, value);  

【问题讨论】:

【参考方案1】:
public string Name get;

应该是你能做的最简单的。

如果您需要对 WPFs PropertyChanged 的​​支持,我通常会这样做

private string name;
public string Name get => name; set => Set(ref name, value); 
private void Set<T>(ref T field, T value, [CallerMemberName]string caller = "")

    field = value;
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(caller ));

可以选择在 Set 方法中添加一个比较,以仅在新值不等于旧值时引发事件。据我所知,c# 9 或 10 中没有任何新功能可以改进这一点。

【讨论】:

是否可以不使用支持字段? (SetPropertyValue 是 DevExpress 中的一个方法) @Roohi 否,因为自动实现的属性只会为您创建一个您看不到的支持字段,并且您无法更改 set 以在添加其他代码时使用该支持字段(不使用一些hacky 反射代码)。 我想知道你是否可以在T value上做一个扩展方法并像value.Set(ref field);一样调用它。 @Roohi 据我所知,没有。在引发 PropertyChanged 时无法编写自动属性。如果在哪里会很好,但这可能会在语言和 WPF 之间引入比语言设计者想要的更紧密的耦合。 @Roohi 文章中提到该功能似乎不适用于 c# 10。请参阅 c#10 new features

在 PHP 中处理多个(未)选中复选框的最简单和最干净的方法

】在PHP中处理多个(未)选中复选框的最简单和最干净的方法【英文标题】:Simplestandcleanestwaytoprocessmultiple(un)checkedcheckboxesinPHP【发布时间】:2013-01-1618:55:42【问题描述】:我有一个电子邮件系统,订阅者可以订阅多个列表。在... 查看详情

为 C/C++ 编写检测分析器的最简单方法是啥?

】为C/C++编写检测分析器的最简单方法是啥?【英文标题】:What\'stheeasiestwaytowriteaninstrumentingprofilerforC/C++?为C/C++编写检测分析器的最简单方法是什么?【发布时间】:2012-09-0305:40:13【问题描述】:我见过一些工具,例如Pin和DynIns... 查看详情

在 Scala 中创建最小堆的最简单和最有效的方法是啥?

】在Scala中创建最小堆的最简单和最有效的方法是啥?【英文标题】:WhatistheeasiestandmostefficientwaytomakeaminheapinScala?在Scala中创建最小堆的最简单和最有效的方法是什么?【发布时间】:2014-11-2505:43:31【问题描述】:valmaxHeap=scala.col... 查看详情

在 SQL 中找到两个集合的最紧凑和最有效的方法是啥? [复制]

】在SQL中找到两个集合的最紧凑和最有效的方法是啥?[复制]【英文标题】:MostcompactandefficientwaytofindthedisunionoftwosetsinSQL?[duplicate]在SQL中找到两个集合的最紧凑和最有效的方法是什么?[复制]【发布时间】:2018-06-0116:58:33【问题... 查看详情

从C中的字符串中删除空格

...2010-12-1603:02:28【问题描述】:在C中从字符串中删除空格的最简单和最有效的方法是什么?【问题讨论】:最简单和最高效的不一定一样@JimFell该问题的标题(曾经)非常具有误导性:它只是在开头删除空格【参考方案1】:正如... 查看详情

如何在c程序中找到最长和最短的字符串?

...ogram?【发布时间】:2021-03-1817:39:51【问题描述】:我尝试编写一个程序来使用函数和数组来查找最短和最长的字符串,但程序不起作用。程序不显示订购的功能。这是我的代码:#include<stdio.h>#include<string.h>voidMax(charx[ 查看详情

了解数组c ++中最小值位置的最简单方法

...位置。例如,如果最小值是读数[10],有没有办法我可以编写代码intcount=0;longreadings[20]=0,0,0,0,0,0,0,0,0,0,0,0,0,0 查看详情

2015.5.9c#编写dll及c#调用c#dll

过程比C#调用VC++dll简单。一、创建DLL新建工程,类型选择类库,生成的结果就是dll注意:在项目属性-应用程序中,注意三个地方,程序集名称和默认命名空间可以调整,但要一致,别的程序调用此DLL时,可通过using命名空间,而... 查看详情

在类中重写函数的最紧凑和最简洁的方法是啥?

...【发布时间】:2018-11-0914:40:59【问题描述】:我正在尝试编写一个用于文本操作的类。这个想法是类将支持基本的文本预处理,但如果有人想编写一个非常复杂的预处理函数,他们应该能够使用基类并覆盖它。我尝试了以下方法 查看详情

选择屏幕区域的最简单方法

...发布时间】:2012-10-0418:39:56【问题描述】:我正在用C#+WPF编写一个简单的程序,记录/序列化用户鼠标和键盘活动,然后他可以播放它。它的某些功能需要用户指定屏幕中小区域的坐标。在文本框中输入左上角和右下角的坐标不... 查看详情

按属性在 JSON 中搜索的最简单方法是啥?

】按属性在JSON中搜索的最简单方法是啥?【英文标题】:WhatisthesimplestwaytosearchinJSONbyattribute?按属性在JSON中搜索的最简单方法是什么?【发布时间】:2018-01-1202:38:15【问题描述】:"names":["id":17,"user_id":9,"code":"de","name":"IchbinHans","c... 查看详情

在 C 中存储和使用具有 1,000,000 位有效数字的浮点数的最有效方法是啥?

...么?【发布时间】:2009-10-0523:39:26【问题描述】:我正在编写一个实 查看详情

在 C 中获取用户输入的最简单方法是啥?

】在C中获取用户输入的最简单方法是啥?【英文标题】:WhatisthesimplestwayofgettinguserinputinC?在C中获取用户输入的最简单方法是什么?【发布时间】:2011-12-1112:25:58【问题描述】:似乎有很多方法可以让您在C中获取用户输入。需要... 查看详情

在 Bigquery 中编写递归查询的最简单方法

】在Bigquery中编写递归查询的最简单方法【英文标题】:SimplestwaytowriterecursivequeryinBigquery【发布时间】:2015-02-0222:39:52【问题描述】:这是编写递归查询的最简单方法[如ConnectByPrior]。假设一个表有两个字段:ID和ParentId表格数据... 查看详情

构建非循环依赖关系的最简单和最有效的数据结构是啥?

】构建非循环依赖关系的最简单和最有效的数据结构是啥?【英文标题】:What\'sthesimplestandmostefficientdatastructureforbuildingacyclicdependencies?构建非循环依赖关系的最简单和最有效的数据结构是什么?【发布时间】:2009-08-1116:08:36【问... 查看详情

在 c# 4.0 中执行火灾和忘记方法的最简单方法

】在c#4.0中执行火灾和忘记方法的最简单方法【英文标题】:Simplestwaytodoafireandforgetmethodinc#4.0【发布时间】:2022-01-1316:00:28【问题描述】:我真的很喜欢这个问题:SimplestwaytodoafireandforgetmethodinC#?我只是想知道,既然我们在C#4.0中... 查看详情

在 Windows/C++ 上控制 USB TMC 设备的最简单方法

】在Windows/C++上控制USBTMC设备的最简单方法【英文标题】:EasiestwaytocontrolUSBTMCdeviceonWindows/C++【发布时间】:2016-04-2715:10:38【问题描述】:我正在开发通过USB与泰克TDS2002示波器交互的C++/Qt应用程序。示波器显示为“USB测试和测量... 查看详情

如何在 linux/c++ 中控制主音量?

...托盘”中的扬声器图标上上下移动滑块完全相同的效果。编写此代码的最佳和最简单的方法是什么?【问题讨论】:b 查看详情