当使用Kotlin时,可以使用apply
来设置现有对象的多个属性并保持代码简洁,例如,而不是:
person.firstName = "John"
person.lastName = "Doe"
person.phone = "123 456 789"
我们可以用途:
person.apply {
firstName = "John"
lastName = "Doe"
phone = "123 456 789"
}
在C#中是否有apply
的对等用法?
最接近的是using
,但据我所知,它不能这样使用。
编辑:我知道C#中的 object initializer,但我实际上是在寻找可以对现有对象(例如,从数据库中获取的对象)执行的操作。
6条答案
按热度按时间kiayqfof1#
试试这个.... https://dev.to/amay077/kotlins-scope-functions-in-c-pbn
下面粘贴的代码是为了方便,但上面的链接是源代码...
可以这样使用......。
nnsrf1az2#
您可以通过以下方式将其用于对象初始值设定项:
或者使用构造函数:
对于构造函数选项,类必须如下所示:
5hcedyr03#
C#(版本8)目前不支援对象初始化之外的群组多重属性指派。
类似的支持存在于VB .NET中,并已被提议用于C#9。
一点历史背景
在Visual Basic.NET中有类似的语句-
With
:这个版本是从Visual Basic 6中移植的,用于向后兼容(以前的非.NET语言版本)。
C#团队(Anders Heilsberg自己在某个地方讲过这个故事)认为
With
语句降低了代码的可读性,不想在语言中引入它。从我所看到的来看,With
语句可以被嵌套,可以造成相当混乱的情况。正如许多其他人已经提到的,有一个非常相似的对象初始化器语法:
未来- C# 9
正如在另一个(删除的)答案中指出的,有一个open proposal for records和With表达式,要在C# 9中添加:
额外提示
然而,我能给予你的最重要的建议是,为了避免打扰可能在你的代码上工作的C#开发人员--我们在C#中不对公共属性和方法使用camelCase,因为C#不是Java。我们使用PascalCase!:)
jrcvhitl4#
使用对象初始值设定项:
在你已经有了对象之后,你可以给予自己一个短变量:
这比
apply
选项的代码更少。thtygnil5#
Object initializers允许您这样做,但仅在对象示例化时。
喜欢
dgsult0t6#
在将
Apply
复制到几个项目中之后,我做了一个nuget包。dotnet add package Object.Extensions.ScopeFunction
它提供了扩展方法
Apply
、ApplyForEach
和Map
(可以覆盖return)。Nuget