属性 的表达式主体集合方法中的多个值
Multiple values in an expression-bodied set method of a property
是否可以在一个set方法中设置多个值?
我想做如下事情:
public int ID { get; set => {Property = value, ID=value}; }
在set
之后不需要=>
,可以用{..}
代替。我认为您正在寻找这样的 class:
class Sample
{
private int _Property;
private int _ID;
public int Property
{
get { return _Property; }
}
public int ID
{
get { return _ID; }
set
{
_ID = value;
_Property = value;
}
}
}
这里有一个 Example 展示了工作原理,
Here the Property
is a read only property you cannot set its value,
it will automatically assigned when you set the value for ID
Expression-bodied setters 没有执行多个操作的表达能力,所以你需要使用完整的方法体语法:
private Foo foo;
public Foo Foo
{
get { return foo; }
set
{
foo = value;
OtherProperty = value.SomethingElse;
}
}
在某些情况下这样做是合理的,因为某些操作本质上具有副作用。例如,如果您正在设置一个对象的时区 属性,则更改基础 DateTime
以确保其 DateTimeKind
是 DateTimeKind.Local
是有意义的。如果不这样做,则对象的 DateTime
属性 不完整或错误。
也就是说,如果您发现自己到处都这样做,您可能需要重新考虑您的设计,因为过度使用会产生代码味道。
是否可以在一个set方法中设置多个值?
我想做如下事情:
public int ID { get; set => {Property = value, ID=value}; }
在set
之后不需要=>
,可以用{..}
代替。我认为您正在寻找这样的 class:
class Sample
{
private int _Property;
private int _ID;
public int Property
{
get { return _Property; }
}
public int ID
{
get { return _ID; }
set
{
_ID = value;
_Property = value;
}
}
}
这里有一个 Example 展示了工作原理,
Here the
Property
is a read only property you cannot set its value, it will automatically assigned when you set the value forID
Expression-bodied setters 没有执行多个操作的表达能力,所以你需要使用完整的方法体语法:
private Foo foo;
public Foo Foo
{
get { return foo; }
set
{
foo = value;
OtherProperty = value.SomethingElse;
}
}
在某些情况下这样做是合理的,因为某些操作本质上具有副作用。例如,如果您正在设置一个对象的时区 属性,则更改基础 DateTime
以确保其 DateTimeKind
是 DateTimeKind.Local
是有意义的。如果不这样做,则对象的 DateTime
属性 不完整或错误。
也就是说,如果您发现自己到处都这样做,您可能需要重新考虑您的设计,因为过度使用会产生代码味道。