C# 修改CodeTypeDeclaration中的默认构造函数

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

我已经编写了一些代码,从CMS中的XML模式生成.NET类型。这一切进展顺利,并产生了我所期望的结果

现在我想自定义生成类型的默认(无参数)构造函数。我有一些代码看起来像:

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);