c#遍历所有类属性和文档生成方法

时间:2015-01-10 21:38:20

标签: c#

我正在为我正在进行的项目制作一个MSDN样式的文档站点。我想知道是否有办法遍历所有类,包括它们的公共属性/方法,并获取它们的摘要和网页生成的其他属性。详情如下:

for Class I需要Name space + summary + inherited class + class definition syntax + public constructors + public properties + public methods

示例:

namespace foo
{
    /// <summary>
    /// ss
    /// </summary>
    public class bar : ClassA, InterfaceA
    {
        public bar(int a, int b)
        {
        }

        public int Property1 { get;set; }

        public int Method1(int a)
        {
            return 1;
        }
    }
}

namespace = foo
summary = ss
继承的class = ClassA
类定义语法= public class bar : ClassA, InterfaceA
public constructors = bar(int,int)
公共财产= Property1
public Methods = Method1(int)

并且对于所有方法,我需要类型的属性,如果它是只读的等等。

长话短说,基本上我想尽可能多地生成MSDN中的信息。任何帮助或想法表示赞赏。

2 个答案:

答案 0 :(得分:0)

我在很久以前就构建了一个函数,通过类PropertyInfo遍历我的模型类,它发现属性的属性并提供对属性元数据的访问。

然后我为我生成所需的SQL插入查询,而不必担心手动输入所有字段

找到下面的代码

public static string GenerateInsertQuery(IModel model)
{
    Type myType = model.GetType();
    string query = "INSERT INTO [" + myType.Name + "] ( ";
    IList<PropertyInfo> props = new List<PropertyInfo>(myType.GetProperties());
    string[] nonDBFields = { "isValid", "isChanged", "CREATEDON", "CHANGEDON", "CHANGEDBY" };

    foreach (PropertyInfo prop in props)
    {
        if (prop.Name == nonDBFields[0] || prop.Name == nonDBFields[1] || prop.Name == nonDBFields[3] || prop.Name == nonDBFields[4])
        {
            continue;
        }
        else
            query += "[" + prop.Name + "] , ";
    }

    query.Remove(query.LastIndexOf(","), 1);
    query += " ) VALUES (";

    foreach (PropertyInfo prop in props)
    {
        if (prop.Name == nonDBFields[0] || prop.Name == nonDBFields[1] || prop.Name == nonDBFields[3] || prop.Name == nonDBFields[4])
        {
            continue;
        }
        else
        {
            if (prop.Name == nonDBFields[2])
            {
                query += "GETDATE(),";
                continue;
            }
            else
            {
                query += " @" + prop.Name + ", ";
                continue;
            }
        }
    }

    query.Remove(query.LastIndexOf(','), 1);
    query += " )";

    return query;
}

答案 1 :(得分:0)

有一个开源解决方案。 http://jimblackler.net/blog/?p=49

注意:它为您的解决方案的XML文档输出提供了一种解决方法。

来自博客:

  

在Visual Studio中,设置包含XML注释的自己的项目。

     

(请注意,默认情况下不启用XML文档输出   视觉工作室。转到项目属性,选择Build,然后选择   “输出”部分选中“XML文档文件”框。它   非常重要的是不要更改XML文件的位置   或者此方法无法在运行时找到它。)