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

标签 c# codedom csharpcodeprovider

使用 CodeDom/CSharpCodeProvider 生成 C# 代码时,是否可以强制输出使用 C# aliases在可能的情况下而不是 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 转换为“long”等)

关于c# - 使用 CodeDom/CSharpCodeProvider 输出 C# 别名(int 等)而不是 CLR 类型(Int32 等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12012672/

相关文章:

c# - 如何将文件保存到物理路径?

c# - 模板参数中的 "Covariance"

c# - 编译 C# 脚本很慢

.net - 哪些 .NET 编程语言有 CodeDom 提供程序?

c# - 一个应用程序可以编译并创建另一个应用程序吗?

c# - 从另一个类更改文本框

java - Java中避免ClassCastException的策略

c# - 新建C# Assembly对预定义函数的访问

c# - 指示 CodeDomProvider 编译器以英语显示错误和警告消息?

c# - 我们如何将嵌入式资源添加到在运行时从源文件编译的文件中