gpt4 book ai didi

c# - 为给定 System.Type 的类定义生成源代码?

转载 作者:行者123 更新时间:2023-12-02 01:17:48 25 4
gpt4 key购买 nike

在给定 System.Type 的情况下,.NET 中有没有一种方法可以创建源代码类定义?

public class MyType
{
public string Name { get; set; }
public int Age { get; set; }
}


string myTypeSourceCode = GetSourceCode( typeof(MyType) );

基本上我在寻找 GetSourceCode() 是什么。

我意识到会有限制:如果有属性 getters/setters 或私有(private)成员,则不包括源,但我不需要那个。假设类型是数据传输对象,那么只需要公开公共(public)属性/字段。

我使用它的目的是为 Web API 自动生成代码示例。

最佳答案

如果你只是想像你展示的那样生成伪接口(interface)代码,你可以像这样迭代公共(public)字段和属性:

string GetSourceCode(Type t)
{
var sb = new StringBuilder();
sb.AppendFormat("public class {0}\n{{\n", t.Name);

foreach (var field in t.GetFields())
{
sb.AppendFormat(" public {0} {1};\n",
field.FieldType.Name,
field.Name);
}

foreach (var prop in t.GetProperties())
{
sb.AppendFormat(" public {0} {1} {{{2}{3}}}\n",
prop.PropertyType.Name,
prop.Name,
prop.CanRead ? " get;" : "",
prop.CanWrite ? " set; " : " ");
}

sb.AppendLine("}");
return sb.ToString();
}

对于类型:

public class MyType
{
public int test;
public string Name { get; set; }
public int Age { get; set; }
public int ReadOnly { get { return 1; } }
public int SetOnly { set {} }
}

输出是:

public class MyType
{
public Int32 test;
public String Name { get; set; }
public Int32 Age { get; set; }
public Int32 ReadOnly { get; }
public Int32 SetOnly { set; }
}

关于c# - 为给定 System.Type 的类定义生成源代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9104642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com