我看到人们在pre-vs2015中为编写多行字符串而得到了这个技巧。这里有问题和好的答案。我的问题不是这是否可能,而是它的含义是什么?
人们
Dim s As String =
<a>
SELECT f1, f2, f3
FROM t1
WHERE f4 = 10
</a>.Value
可读也好。没有特殊处理,它没有回车的能力。但我怀疑,这是在运行时的额外处理以及字符串实习?
答案 0 :(得分:2)
当然有一个开销,但我认为不是那么多:
有一个ctor调用XElement与它关联的XName(通过字符串的隐式转换),它的唯一内容是文本(字符串作为对象)。 从reference source中我所看到的来看,ctor本身似乎也做得不多;首先针对XNode测试内容类型,然后是字符串,只需将内部内容字段设置为字符串。
价值属性显然与原则相同。
该字符串似乎也被实现了,因为在整个事件上调用String.IsInterned会返回字符串而不是null。
通过表达式评估,XElement不再使用,因此它可以直接用于GC的收集(可能在gen0中被释放)。
总而言之,除非性能至关重要,否则我更不用说真正担心(但只有真正的分析才能判断开销是来自那个还是其他地方)。