使用 Specflow.Assist .Dynamic 访问具有特殊字符的属性
Accessing properties with special characters using Specflow.Assist .Dynamic
我有一个 Specflow table,它的列 headers 带有特殊字符,例如 "CC $ Portion Total" & "Dollar Value (total in C2C)".
var content = table.CreateDynamicSet();
当我像上面那样创建动态集时,它删除了上面列 headers 的空格。但是我无法以
的形式访问它们的属性
content.CC$PortionTotal
或
content.DollarValue(totalinC2C)
因为,C# 在看到 $ 、( 和 ) 等特殊字符时会出错
有谁知道如何解决这个问题?
发送
已更新
这在 SpecFlow.Assist.Dynamic 的 1.1.0 中已修复,它允许 headers 列中的任何字符。在 属性 中,这将被删除。了解 functionality here
哎呀...是的,这将是一个问题,因为这些是 C# 中的保留字符。现在代码无法很好地处理这个问题,所以你唯一的办法就是重命名列(例如写出 "dollars" 并去掉括号)。
请在 GitHub 提出问题,我会看看我能做些什么,但我担心我将不得不删除保留字符,让名称更难理解。但它不会让你崩溃,至少 :)
对此感到抱歉。希望我的工作能给你一些想法
非常感谢您的 swift 回复,是的,如果我们能像去除空格那样去掉特殊字符,那就太好了。我认为在步骤定义级别将它们剥离是 oki(利益相关者不是在看那个,而是功能文件),因为我们想要的只是掌握 属性 值以针对实际结果进行断言。
甚至我问我的团队是否可以从我们的 SBE session 中的功能文件中删除特殊字符,但他们认为这不是一个好主意,因为它会降低利益相关者使用的活动文档的可重读性。我打算遍历 table headers 并删除特殊字符,然后创建一个动态集。顺便提一下,感谢您对这个动态库的贡献。这很棒!
在 Marcus 解决这个问题之前,我们可以按以下方式解决这个问题
foreach (var header in table.Header)
{
table.RenameColumn(header, Regex.Replace(header, "[^0-9a-zA-Z]+", String.Empty));
}
我有一个 Specflow table,它的列 headers 带有特殊字符,例如 "CC $ Portion Total" & "Dollar Value (total in C2C)".
var content = table.CreateDynamicSet();
当我像上面那样创建动态集时,它删除了上面列 headers 的空格。但是我无法以
的形式访问它们的属性content.CC$PortionTotal
或
content.DollarValue(totalinC2C)
因为,C# 在看到 $ 、( 和 ) 等特殊字符时会出错
有谁知道如何解决这个问题?
发送
已更新 这在 SpecFlow.Assist.Dynamic 的 1.1.0 中已修复,它允许 headers 列中的任何字符。在 属性 中,这将被删除。了解 functionality here
哎呀...是的,这将是一个问题,因为这些是 C# 中的保留字符。现在代码无法很好地处理这个问题,所以你唯一的办法就是重命名列(例如写出 "dollars" 并去掉括号)。
请在 GitHub 提出问题,我会看看我能做些什么,但我担心我将不得不删除保留字符,让名称更难理解。但它不会让你崩溃,至少 :)
对此感到抱歉。希望我的工作能给你一些想法
非常感谢您的 swift 回复,是的,如果我们能像去除空格那样去掉特殊字符,那就太好了。我认为在步骤定义级别将它们剥离是 oki(利益相关者不是在看那个,而是功能文件),因为我们想要的只是掌握 属性 值以针对实际结果进行断言。
甚至我问我的团队是否可以从我们的 SBE session 中的功能文件中删除特殊字符,但他们认为这不是一个好主意,因为它会降低利益相关者使用的活动文档的可重读性。我打算遍历 table headers 并删除特殊字符,然后创建一个动态集。顺便提一下,感谢您对这个动态库的贡献。这很棒!
在 Marcus 解决这个问题之前,我们可以按以下方式解决这个问题
foreach (var header in table.Header)
{
table.RenameColumn(header, Regex.Replace(header, "[^0-9a-zA-Z]+", String.Empty));
}