C# 修改CodeTypeDeclaration中的默认构造函数
我已经编写了一些代码,从CMS中的XML模式生成.NET类型。这一切进展顺利,并产生了我所期望的结果 现在我想自定义生成类型的默认(无参数)构造函数。我有一些代码看起来像:C# 修改CodeTypeDeclaration中的默认构造函数,c#,code-generation,C#,Code Generation,我已经编写了一些代码,从CMS中的XML模式生成.NET类型。这一切进展顺利,并产生了我所期望的结果 现在我想自定义生成类型的默认(无参数)构造函数。我有一些代码看起来像: CodeNamespace codeNamespace = new CodeNamespace("MyNamespace"); // import type mappings from schema // export type mappings into codeNamespace CodeTypeDeclaratio
CodeNamespace codeNamespace = new CodeNamespace("MyNamespace");
// import type mappings from schema
// export type mappings into codeNamespace
CodeTypeDeclaration codeType = codeNamespace.Types.First();
此时,我可以成功地修改codeType
;添加/删除属性、属性等
但是,检查代码类型
的成员
属性表明尚未定义默认构造函数。当然我可以加一个;但是当我去写代码字符串时(使用CSharpCodeProvider.GenerateCodeFromNamespace
),另一个默认构造函数被添加到输出中(在本例中,用于在从架构派生的字段上设置一些默认值)
我试图做的基本上是在默认构造函数中插入对方法的调用(根据上面的说明,我可以成功地将该方法添加到codeType
)
(如何)当我写出代码字符串时,插入了一个默认构造函数(以前在
成员集合中不存在),(如何)处理这个事实?嗯,我觉得有点傻
在调试过程中,我把自己弄糊涂了——我正在查看一个codeType
,它没有定义默认构造函数,并将生成的源代码与一个包含默认构造函数的类型进行比较
我能够使用类似于以下的代码来处理这两种情况:
var ctor = codeType.Members
.Cast<CodeTypeMember>()
.SingleOrDefault(m => m.GetType() == typeof(CodeConstructor));
if (ctor == null)
{
//codeType didn't define a default constructor, so create one
ctor = new CodeConstructor() { Attributes = MemberAttributes.Public };
}
else
{
//codeType did define a default constructor, remove it before modifying
codeType.Members.Remove(ctor);
}
//make some modifications to ctor
//add ctor to the codeType
codeType.Members.Add(ctor);
var-ctor=codeType.Members
.Cast()
.SingleOrDefault(m=>m.GetType()==typeof(CodeConstructor));
if(ctor==null)
{
//codeType没有定义默认构造函数,所以创建一个
ctor=newcodeConstructor(){Attributes=MemberAttributes.Public};
}
其他的
{
//codeType没有定义默认构造函数,请在修改之前删除它
代码类型.Members.Remove(ctor);
}
//对ctor进行一些修改
//将ctor添加到代码类型
codeType.Members.Add(ctor);
嗯,我觉得有点傻
在调试过程中,我把自己弄糊涂了——我正在查看一个codeType
,它没有定义默认构造函数,并将生成的源代码与一个包含默认构造函数的类型进行比较
我能够使用类似于以下的代码来处理这两种情况:
var ctor = codeType.Members
.Cast<CodeTypeMember>()
.SingleOrDefault(m => m.GetType() == typeof(CodeConstructor));
if (ctor == null)
{
//codeType didn't define a default constructor, so create one
ctor = new CodeConstructor() { Attributes = MemberAttributes.Public };
}
else
{
//codeType did define a default constructor, remove it before modifying
codeType.Members.Remove(ctor);
}
//make some modifications to ctor
//add ctor to the codeType
codeType.Members.Add(ctor);
var-ctor=codeType.Members
.Cast()
.SingleOrDefault(m=>m.GetType()==typeof(CodeConstructor));
if(ctor==null)
{
//codeType没有定义默认构造函数,所以创建一个
ctor=newcodeConstructor(){Attributes=MemberAttributes.Public};
}
其他的
{
//codeType没有定义默认构造函数,请在修改之前删除它
代码类型.Members.Remove(ctor);
}
//对ctor进行一些修改
//将ctor添加到代码类型
codeType.Members.Add(ctor);