小编jw0*_*0rd的帖子

c#.NET运行时对象类型

我需要创建一个对象的实例,该对象的类型将在运行时确定.从SQL中提取对象的类型并将其设置为字符串值.我还需要在实例化时传递一些参数.参数的数量/类型每次都相同(至少现在).我需要用什么来实现这一点,Activator.CreateInstance?任何帮助,将不胜感激.

    private void StartScans(int scan_typeid, SqlDataReader drActiveServers)
    {
        string sql = "SELECT scan_typeclass from scan_types WHERE scan_typeid = " + scan_typeid.ToString();
        sqlconn.Open();
        SqlCommand cmd = new SqlCommand(sql, sqlconn);
        SqlDataReader drScanClass = cmd.ExecuteReader(CommandBehavior.CloseConnection);

        string scan_class = drScanClass["scan_typeclass"].ToString();

        //Create object here

    }
Run Code Online (Sandbox Code Playgroud)

编辑:

理查德·伯格的解决方案在控制台应用程序中工作但不在上面的示例中,我已经转储了scan_class并验证了它获取值但是我一直收到此错误:

System.ArgumentNullException:值不能为null.参数名称:类型

这是我更新的代码:

        try
        {
            string sql = "SELECT scan_typeclass from scan_types WHERE scan_typeid = " + scan_typeid.ToString();
            sqlconn3.Open();
            SqlCommand cmd = new SqlCommand(sql, sqlconn3);
            SqlDataReader drScanClass = cmd.ExecuteReader();
            drScanClass.Read();

            string scan_class = drScanClass["scan_typeclass"].ToString();

            var type = Type.GetType(scan_class);
            var …
Run Code Online (Sandbox Code Playgroud)

.net c# reflection

3
推荐指数
1
解决办法
2834
查看次数

c#.NET动态对象名称

自上次我接触Java以来​​,我没有使用过Reflection,而且我有点生疏了.我创建了一个使用计时器的Windows服务,对于某些类,我需要将对象名称设置为动态(从sql表中提取).对象创建的范围在while循环中,我需要能够保存每个对象的属性.

编辑:

结束使用字典,以便我可以稍后检索每个对象的属性.

    private void GetActiveScans()
    {
        string sql = "SELECT * FROM scans WHERE enabled = 1";
        SqlConnection sqlconn = new SqlConnection(connectionString);
        sqlconn.Open();
        SqlCommand cmd = new SqlCommand(sql, sqlconn);
        SqlDataReader drActiveScans = cmd.ExecuteReader(CommandBehavior.CloseConnection);

        Dictionary<int, WindowsServiceAudit> WSA = new Dictionary<int, WindowsServiceAudit>();

        while (drActiveScans.Read())
        {
            string tmpscantype = drActiveScans["scantype"].ToString();

            switch (tmpscantype)
            {
                case "services":
                    int scanid = Convert.ToInt32(drActiveScans["scanid"]);
                    string scanname = drActiveScans["scanname"].ToString();
                    int serverclass = Convert.ToInt32(drActiveScans["serverclass"]);
                    int interval = Convert.ToInt32(drActiveScans["interval"]);

                    WindowsServiceAudit x = new WindowsServiceAudit(scanid, scanname, serverclass, interval);
                    WSA.Add(scanid, x);                
                    break; …
Run Code Online (Sandbox Code Playgroud)

.net c# class dynamic

0
推荐指数
1
解决办法
1575
查看次数

标签 统计

.net ×2

c# ×2

class ×1

dynamic ×1

reflection ×1