[英]Convert CLR type names to equivalent idiomatic C# aliases (eg System.String => string, Int32 => int)
[英]Outputting C# aliases (int, etc) instead of CLR types (Int32, etc) using CodeDom / CSharpCodeProvider
使用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它转换为“长”等)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.