使用 CodeDom / CSharpCodeProvider 输出 C# 别名(int 等)而不是 CLR 类型(In


使用

CodeDom/CSharpCodeProvider 生成 C# 代码时,是否可以强制输出尽可能使用 C# 别名而不是 CLR 类型?

我目前正在分析生成的 C# 代码并将 CLR 类型替换为它们的别名,但我想了解是否可以在代码生成期间执行此操作。

默认情况下,Microsoft.CSharp.CSharpCodeProvider 会生成具有 C# 别名的代码。

例:

        CodeCompileUnit compileUnit = new CodeCompileUnit();
        CodeNamespace sampleNamespace = new CodeNamespace("Sample");
        CodeTypeDeclaration sampleClass = new CodeTypeDeclaration("SampleClass");
        sampleClass.IsClass = true;
        sampleClass.Members.Add(new CodeMemberField(typeof(Int32), "_sampleField"));
        CodeMemberProperty prop = new CodeMemberProperty();
        prop.Attributes = MemberAttributes.Public | MemberAttributes.Final;
        prop.Name = "SampleProp";
        prop.HasGet = true;
        prop.Type = new CodeTypeReference(typeof(System.Int32));
        prop.GetStatements.Add(new CodeMethodReturnStatement(
    new CodeFieldReferenceExpression(
    new CodeThisReferenceExpression(), "_sampleField")));
        sampleClass.Members.Add(prop);
        sampleNamespace.Types.Add(sampleClass);
        compileUnit.Namespaces.Add(sampleNamespace);
        using (var fileStream = new StreamWriter(File.Create("outputfile.cs")))
        {
            var provider = new Microsoft.CSharp.CSharpCodeProvider();
            provider.GenerateCodeFromCompileUnit(compileUnit, fileStream, null);
        }

将生成:

namespace Sample {
    public class SampleClass {
        private int _sampleField;
        public int SampleProp {
            get {
                return this._sampleField;
            }
        }
    }
}

如您所见,尽管我使用了typeof(Int32),但它将其转换为"int"。(Int64 它转换为"长"等)

相关内容

  • 没有找到相关文章

最新更新