【发布时间】:2018-11-30 20:13:01
【问题描述】:
鉴于此代码:
var (c, d) = new Test();
这样可以从Deconstruct 方法中获取变量名吗?
public class Test
{
public void Deconstruct(out string value1, out string value2)
{
// is there a way to know the parameters are
// being mapped to "c" and "d" respectively
// inside this method?
}
}
重构以下代码以减少重复量的想法:
var parsed = Regex
.Match("123: qwe: qweasd", @"(?<id>\d+?): (?<level>\d+?): (?<message>\d+?):")
.Apply(m => !m.Success ? null : new
{
// notice the names are repeated on both side
ID = m.Group["id"].Value,
Level = m.Group["level"].Value,
Message = m.Group["message"].Value,
});
我想用Test 类解决什么:
var (id, level, message) = Regex
.Match("123: qwe: qweasd", @"(?<id>\d+?): (?<level>\w+?): (?<message>\w+?):")
.Groups
.AsDeconstructable(); //
【问题讨论】:
-
我不知道(但我说这并不排除存在一些过于复杂和讨厌的黑客/技巧)。但对我来说,整个事情听起来像是一个 XY 问题。你到底想用
var (c, d) = new Test();这样的行来实现什么? -
@elgonzo 我已经用真正的问题更新了我的问题。
-
请注意,您的元组示例与
dynamic示例具有相同的名称重复。您只是稍微移动了目标:不必在 Apply 方法中复制组名,现在必须在元组解构中复制组名。不同的地方,相同的名字重复。 -
如果没有大量工作,您无法在运行时创建匿名类,但您可以使用另一种结构,例如
Dictionary。另外,我建议您对重复存在误解 -Level作为匿名类型字段和"level"作为字符串常量之间存在很大差异。 -
我不知道你在说什么。无论您在方法中使用元组解构还是其他方法,如果您不想使用/返回组集合本身,则必须将
m.Group["id"].Value的值分配给某些东西。为什么分配会导致您可以使用result.id与仅id之类的东西对您来说如此重要?这感觉更像是你无缘无故地抓痒;或者我完全误解了你想用这个去哪里......