阅读deconstructing时,我注意到您可以将对象中的select属性拉到元组中。这似乎是从Azure表查询返回对象子集的好方法,否则它将用您可能不需要的属性(即eTag,PartitionKey,RowKey等)填充查询对象。
过去,我创建了我的类,并在其中创建了一个DTO,以表示要从Web API查询返回的属性的子集,如下所示:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button type="button" name="btnOcultarEncabezadoFactura" class="btn btn-xs btn-primary" id="OcultarEncabezadoFactura" data-row-id="0">Ocultar Encabezado</button>
<fieldset id="fsEncabezado"></fieldset>
当我使用public class Person : TableEntity
{
public Person(string firstName, string lastName)
{
PartitionKey = firstName;
RowKey = lastName;
}
public Person(){} //parameterless constructor needed by Azure Tables
public string SomeValue1 {get; set;}
public string SomeValue2 {get; set;}
}
public class PersonDTO
{
public string SomeValue1 {get; set;}
public string SomeValue2 {get; set;}
}
对象时,我想我可以创建一个扩展方法,该方法返回元组并完全摆脱Person
。这有意义吗?它是定义DTO的可行选择吗?如果没有,后果是什么?我不喜欢为DTO管理一个单独的类,它实际上只是Azure表中原始实体的属性的子集。
PersonDTO
这样称呼:
public static (string, string) GetValues(this Person p)
{
return (p.SomeValue1, p.SomeValue2);
}
更新:一种替代方法似乎是使用名称为Person person = new Person("Frank", "Rizzo")
{
person.SomeValue1 = "Value1",
person.SomeValue2 = "Value2"
};
var (personValue1, personValue2) = person.GetValues();
的重载,而无需使用如下扩展方法:
Deconstruct
这样称呼:
public void Deconstruct(out someValue1, out someValue2)
{
someValue1 = SomeValue1;
someValue2 = SomeValue2;
}
上面的语法可能略有偏离(从内存中写入而不是实际的工作代码示例)。