【发布时间】:2022-10-04 21:05:08
【问题描述】:
我正在尝试使用命名元组的值初始化我正在创建的对象的属性。
像这样的东西
public Person DoIt() {
return new Person {
(First, Last) = GetFirstAndLast(id)
};
}
public (string first, string last) GetFirstAndLast(int id) {
return (\"First name\", \"Last name\");
}
我知道这样做可以达到相同的效果,但我不想使用额外的变量。
public Person DoIt()
{
var (first, last) = GetFirstAndLast(0);
return new Person
{
First = first,
Last = last
};
}
-
您提出的语法根本不是该语言的一部分;您不能将元组解构为对象初始化程序。最接近的是
Person result = new(); (result.First, result.Last) = GetFirstAndLast(id); return result;,我认为它足够简短和清晰,除了隐式转换运算符和采用元组的构造函数等更人为的选项。 -
GetFirstAndLast返回一个元组而不是返回一个Person有什么原因吗?我知道这是一个例子,但是在现实世界的场景中,这将是有用的,而不是首先简单地使用正确的类型? -
@Xerillio 在现实生活中,该方法需要返回两个值(一个枚举值和一个字符串)。使用结果的类型会创建一个类型的新实例,并用 GetFirstAndLast 方法的结果填充两个属性。它还从对象初始化器初始化其他字段。
标签: c# tuples namedtuple object-initializers