【问题标题】:c# iterate through all class properties and methods for document generationc# 遍历所有类属性和方法以生成文档
【发布时间】:2015-01-10 21:38:19
【问题描述】:

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

对于我需要命名空间+摘要+继承类+类定义语法+公共构造函数+公共属性+公共方法的类

例子:

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;
        }
    }
}

命名空间 = foo
摘要 = ss
继承 class= ClassA
类定义语法 = public class bar : ClassA, InterfaceA
公共构造函数 = bar(int, int)
公共属性 = Property1
公共方法 = Method1(int)

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

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

【问题讨论】:

标签: c#


【解决方案1】:

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

注意:它可以解决您的解决方案的 XML 文档输出。

来自博客:

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

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

【讨论】:

    【解决方案2】:

    我很久以前就构建了一个函数,通过 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-23
      • 1970-01-01
      • 2010-10-06
      • 2012-10-29
      相关资源
      最近更新 更多