现在的位置: 首页 > 综合 > 正文

泛型使用,及 动态显示多个类的属性名与值的 例子

2013年09月22日 ⁄ 综合 ⁄ 共 6614字 ⁄ 字号 评论关闭

1, 原代码:

         #region ### ScriptTask
            List<PkgScriptTask> lstPkgScriptTask = pkgIndex.LstPkgScriptTask;
            if (lstPkgScriptTask != null && lstPkgScriptTask.Count > 0)
            {
                txtPkgInfo.AppendText("\r\n" + lstPkgScriptTask[0].GetType().ToString() + ":");
                txtPkgInfo.AppendText("\r\nSTART analysizing---");

                txtPkgInfo.AppendText("\r\n");
                foreach (PkgScriptTask pbi in lstPkgScriptTask) // list title
                {
                    foreach (System.Reflection.PropertyInfo info in typeof(PkgScriptTask).GetProperties())
                    {
                        txtPkgInfo.AppendText(Convert.ToChar(Keys.Tab) + info.Name);
                    }
                    break;
                }
                txtPkgInfo.AppendText("\r\n");

                foreach (PkgScriptTask pbi in lstPkgScriptTask) // list value
                {
                    foreach (System.Reflection.PropertyInfo info in typeof(PkgScriptTask).GetProperties())
                    {
                        txtPkgInfo.AppendText(Convert.ToChar(Keys.Tab) + info.GetValue(pbi, null).ToString());
                    }
                    txtPkgInfo.AppendText("\r\n\r\n"); 
                }
                txtPkgInfo.AppendText("END analysizing---\r\n");
            }

            //OutputClassObj(lstPkgScriptTask,pkgIndex);

            #endregion ### ScriptTask

2,通过泛型改进后的代码及调用示例

       private void OutputClassObj<T>(List<T> t, PkgIndex pkgIndex)
        {
            List<T> lstPkgObj = new List<T>();
            lstPkgObj = t;
  
            if (lstPkgObj != null && lstPkgObj.Count > 0)
            {
                txtPkgInfo.AppendText("\r\n" + lstPkgObj[0].GetType().ToString() + ":");
                txtPkgInfo.AppendText("\r\nSTART analysizing---");

                txtPkgInfo.AppendText("\r\n");
                foreach (T pbi in lstPkgObj) // list title
                {
                    foreach (System.Reflection.PropertyInfo info in typeof(T).GetProperties())
                    {
                        txtPkgInfo.AppendText(Convert.ToChar(Keys.Tab) + info.Name);
                    }
                    break;
                }
                txtPkgInfo.AppendText("\r\n");

                foreach (T pbi in lstPkgObj) // list value
                {
                    foreach (System.Reflection.PropertyInfo info in typeof(T).GetProperties())
                    {
                        txtPkgInfo.AppendText(Convert.ToChar(Keys.Tab) + info.GetValue(pbi, null).ToString());
                    }
                    txtPkgInfo.AppendText("\r\n");
                }
                txtPkgInfo.AppendText("END analysizing---\r\n");
            }
        }

调用示例:

        private void OpenPkgIndex(PkgIndex pkgIndex)
        {
            #region ### basic Info
            List<PkgBasicInfo> lstPkgBasicInfo = pkgIndex.LstPkgBasicInfo;
            OutputClassObj(lstPkgBasicInfo, pkgIndex);
            #endregion ### basic info

            #region ### configuration
            List<PkgConfiguration> lstPkgConfiguration = pkgIndex.LstPkgConfig;
            OutputClassObj(lstPkgConfiguration, pkgIndex);
            #endregion ### configuration

            #region ### Connection
            List<PkgConnection> lstPkgConnection = pkgIndex.LstPkgConnection;
            OutputClassObj(lstPkgConnection, pkgIndex);
            #endregion ### Connection

            #region ### Variable
            List<PkgVariable> lstPkgVariable = pkgIndex.LstPkgVariable;
            OutputClassObj(lstPkgVariable, pkgIndex);
            #endregion ### Variable

            #region ### InputColumn
            List<PkgInputColumn> lstPkgInputColumn = pkgIndex.LstPkgInputColumn;
            OutputClassObj(lstPkgInputColumn, pkgIndex);
            #endregion ### InputColumn

            #region ### OutputColumn
            List<PkgOutputColumn> lstPkgOutputColumn = pkgIndex.LstPkgOutputColumn;
            OutputClassObj(lstPkgOutputColumn, pkgIndex);
            #endregion ### OutputColumn

            #region ### SqlScript
            List<PkgSqlScript> lstPkgSqlScript = pkgIndex.LstPkgSqlScript;
            OutputClassObj(lstPkgSqlScript, pkgIndex);
            #endregion ### ScriptTask

            #region ### ScriptTask
            List<PkgScriptTask> lstPkgScriptTask = pkgIndex.LstPkgScriptTask;
            OutputClassObj(lstPkgScriptTask, pkgIndex);
            #endregion ### ScriptTask
        }

3,上述用到的几个类:(其实这几个类是在解析SSIS包时用到的)

PkgIndex.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ReadPkgLib
{
   public class PkgIndex
    {
       public List<PkgBasicInfo> LstPkgBasicInfo { get; set; }
       public List<PkgConfiguration> LstPkgConfig { get; set; }
       public List<PkgConnection> LstPkgConnection { get; set; }
       public List<PkgVariable> LstPkgVariable { get; set; }
       public List<PkgScriptTask> LstPkgScriptTask { get; set; }
       public List<PkgSqlScript> LstPkgSqlScript { get; set; }
       public List<PkgInputColumn> LstPkgInputColumn { get; set; }
       public List<PkgOutputColumn> LstPkgOutputColumn { get; set; }

    
       public void ClearAll()
       {
           if (LstPkgBasicInfo == null || LstPkgBasicInfo.Count > 0)
               LstPkgBasicInfo = new List<PkgBasicInfo>();

           if (LstPkgConfig == null || LstPkgConfig.Count > 0)
               LstPkgConfig = new List<PkgConfiguration>();

           if (LstPkgConnection == null || LstPkgConnection.Count > 0)
               LstPkgConnection = new List<PkgConnection>();

           if (LstPkgVariable == null || LstPkgVariable.Count > 0)
               LstPkgVariable = new List<PkgVariable>();

           if (LstPkgScriptTask == null || LstPkgScriptTask.Count > 0)
               LstPkgScriptTask = new List<PkgScriptTask>();

           if (LstPkgSqlScript == null || LstPkgSqlScript.Count > 0)
               LstPkgSqlScript = new List<PkgSqlScript>();

           if (LstPkgInputColumn == null || LstPkgInputColumn.Count > 0)
               LstPkgInputColumn = new List<PkgInputColumn>();

           if (LstPkgOutputColumn == null || LstPkgOutputColumn.Count > 0)
               LstPkgOutputColumn = new List<PkgOutputColumn>();
 
       }

       public PkgIndex()
       {
           ClearAll();
       }

    }

}

PkgBasicInfo.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ReadPkgLib
{
   public class PkgBasicInfo:PkgObj
    {

       public bool HasFileMetrics { get; set; }
       public bool HasLogging { get; set; }
       public string CreatorName { get; set; }
       public string CreatorComputer { get; set; }
       public string CreationDate { get; set; }
       public string LocalSvnUrl { get; set; }
       public string ServerSvnUrl { get; set; }

    }
}

PkgConfiguration.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ReadPkgLib
{
    public class PkgConfiguration : PkgObj
    {

        public string ConfigurationString { get; set; }
        public string ConfigurationVariable { get; set; }

    }
}

PkgConnection.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ReadPkgLib
{
    public class PkgConnection : PkgObj
    {

        public string CreationName { get; set; }
        public string PropertyExpression { get; set; }
        public string EvaluateValue { get; set; }

    }


}

PkgInputColumn.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ReadPkgLib
{
    public class PkgInputColumn : PkgObj
    {
        public int RowNum { get; set; }
        public int Length { get; set; }
        public string DataType { get; set; }

    }
}

PkgOutputColumn.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ReadPkgLib
{
    public class PkgOutputColumn : PkgObj
    {
        public int RowNum { get; set; }
        public int Length { get; set; }
        public string DataType { get; set; }

    }
}

PkgScriptTask.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ReadPkgLib
{
    public class PkgScriptTask : PkgObj
    {
        public int RowNum { get; set; }
        public string Language { get; set; }
        public string EntryPoint { get; set; }
        public bool SaveBinaries { get; set; }
        public string ReadOnlyVariables { get; set; }
        public string ReadWriteVariables { get; set; }
        public bool OptimizeScriptExecution { get; set; }
        public string Script { get; set; }

    }
}

PkgSqlScript.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ReadPkgLib
{
    public class PkgSqlScript : PkgObj
    {
        public int RowNum { get; set; }
        public string Script { get; set; }

    }
}

PkgVariable.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ReadPkgLib
{
    public class PkgVariable : PkgObj
    {

        public int ReadOnly { get; set; }
        public string Namespace { get; set; }
        public string VariableValue { get; set; }

    }
}

PkgObj.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ReadPkgLib
{
   public class PkgObj
    {
       public string ObjectName { get; set; }
    }

}

抱歉!评论已关闭.