我当前正在创建一个模块,该模块将使用C#中的Gembox.Document在Word中创建合并字段。首先,我只想说这是我已经完成的任务,因此无论这是做与否的坏方法,这都是他们想要的方法。
我有一个Windows窗体应用程序,其中有一个文本框和一个按钮。他们希望在文本框中粘贴dto /模型,例如:
"public class Example
{
public string Name { get; set; }
public string Surname { get; set; }
public string Cellphone { get; set; }
public string Address { get; set; }
public string CompanyName { get; set; }
public DateTime CurrentDate { get; set; }
}"
我已经有了使用在其中传递包含所有合并字段名称的string []的方法向单词添加mergefields的逻辑。
问题是:我需要能够对这个大字符串进行子字符串化,使其上方包含一个在文本框中以字符串形式编写的dto / model,以获取属性名称并将其添加到中string[]
,因为它们将是合并字段名称。
我希望我能很好地解释自己。这是我的第一个问题,我不习惯用英语解释我的问题。
编辑:要指定问题:我需要从该字符串中获取属性名称,并将其放入string[]
:
string s = @"public string Name { get; set; }
public string Surname { get; set; }
public string Cellphone { get; set; }
public string Address { get; set; }
public string CompanyName { get; set; }
public DateTime CurrentDate { get; set; }"
我认为也许您应该解析此文本(使用解析器而不是自己的解决方案),而不是搜索语法树以查找属性名称。我想到了类似的东西:
这段代码返回完整的树或错误(我使用NRefactory,但您可以使用Roslyn):
var parser = new CSharpParser();
var syntaxTree = parser.Parse(programCode);
而不是在syntaxTree字段中搜索属性。
示例代码:
const string code = @"public class Example {
public string Name { get; set; }
public string Surname { get; set; }
public string Cellphone { get; set; }
public string Address { get; set; }
public string CompanyName { get; set; }
public DateTime CurrentDate { get; set; }
}";
var syntaxTree = new CSharpParser().Parse(code, "program.cs");
var listOfPropertiesNames = syntaxTree.Children
.SelectMany(astParentNode => astParentNode.Children)
.OfType<PropertyDeclaration>()
.Select(astPropertyNode => astPropertyNode.Name)
.ToList();
此代码段提取属性名称。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句