c# - 在 .Net 3.5 中使用动态关键字

标签 c# object dynamic controls

我在 visual studio 2013 中使用 .net v4.5 编写了这段代码。我遇到的问题是我现在不得不下降到 .net v3.5 并且 dynamic 关键字由于缺少程序集引用而抛出错误。 .net v3.5 中是否有与“动态”等效的类型,或者我可以通过某种方式获得与以下相同的结果?

我想我可能已经找到答案 here 了,但是当我添加 .Attributes 或 .Text 属性修改时 var 抛出错误。

private void CreateControl<T>(string objText,
                              Panel pnl,
                              string HTMLTag = "<td>",
                              string applicantID = "",
                              EventHandler hndl = null)
{
    pnl.Controls.Add(new LiteralControl(HTMLTag));
    dynamic obj = Activator.CreateInstance(typeof(T));
    obj.Text = objText;

    if (applicantID != string.Empty)
    {
        obj.Attributes.Add("ApplicantID", applicantID);
    }
    if (hndl != null)
    {
        obj.Click += new EventHandler(hndl);
    }

    pnl.Controls.Add(obj);
    pnl.Controls.Add(new LiteralControl(HTMLTag.Insert(1, "/")));
}

最佳答案

我没有尝试以某种必然会失败的方式将其组合在一起,而且由于 .net v3.5 中没有“动态”控件,我决定完全放弃此方法并编写一些重载。这种方式在这一点上似乎更安全;工作原理相同,只是多了一点代码...

    #region CreateControl() Overloads
            /// <summary>
            /// Creates a LinkButton control.
            /// </summary>
            /// <param name="objText">.Text property of this LinkButton control.</param>
            /// <param name="pnl">Panel this control will be attached to.</param>
            /// <param name="hndl">Event handler attached to this LinkButton control.</param>
            /// <param name="HTMLTag">Opening tag used to contain this control.</param>
            private void CreateControl(string objText,
                                       Panel pnl,
                                       EventHandler hndl,
                                       string HTMLTag)
            {
                pnl.Controls.Add(new LiteralControl(HTMLTag));
                LinkButton obj = new LinkButton();
                obj.Text = objText;
                obj.Click += new EventHandler(hndl);

                pnl.Controls.Add(obj);
                pnl.Controls.Add(new LiteralControl(HTMLTag.Insert(1, "/")));
            }
            /// <summary>
            /// Creates a Label control.
            /// </summary>
            /// <param name="objText">.Text property of this Label control.</param>
            /// <param name="pnl">Panel this control will be attached to.</param>
            /// <param name="HTMLTag">Opening tag used to contain this control.</param>
            private void CreateControl(string objText,
                                       Panel pnl,
                                       string HTMLTag)
            {
                pnl.Controls.Add(new LiteralControl(HTMLTag));
                Label obj = new Label();
                obj.Text = objText;

                pnl.Controls.Add(obj);
                pnl.Controls.Add(new LiteralControl(HTMLTag.Insert(1, "/")));
            }
            /// <summary>
            /// Creates the specified literal control.
            /// </summary>
            /// <param name="ControlText">HTML text containing instructions for creating the desired literal control.</param>
            /// <param name="pnl">Panel this literal control will be attached to.</param>
            private void CreateControl(string ControlText, 
                                       Panel pnl)
            {
                pnl.Controls.Add(new LiteralControl(ControlText));
            }
        #endregion

关于c# - 在 .Net 3.5 中使用动态关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21839617/

相关文章:

c# - 如何在相关编辑器中使用 RestSharp 打开 HTTP 正文中作为二进制内容接收的文件

c# - 如何获取记事本文件保存位置

c# - log4net 配置 [程序集 :]

iOS 创建实例并在应用程序的许多类中使用的最佳方式

使用指针的动态 LinkedList 的 push() 和 pop() 方法的 C++ 问题

algorithm - 关于分配,动态规划。让我的代码更有效率?

c# - 引用基于编译器开关的 .NET 程序集

C# 给 PictureBox 添加一个选项

javascript - 未捕获的 TypeError 无法读取未定义的属性 'name'

java - Android在线性布局中动态添加EditText