Tag: 动态

在使用reflection时,如何确定方法是否返回动态类型?

使用reflection时,可以检查DynamicAttribute属性的字段,属性,索引器和参数,以确定它们具有动态类型。 但是,这对于Methods不起作用 – 即使它们返回’dynamic’,它们也没有属性,它们的返回类型是’object’(也没有属性)。 Visual Studio为intellisense为外部程序集中的方法执行此操作…可以使用reflection来完成吗? 例如,下面的代码生成此输出: dynamicField is dynamic DynamicProperty is dynamic Item is dynamic DynamicMethod is NOT dynamic!! dynamicParameter is dynamic 示例代码: using System; using System.Reflection; using System.Runtime.CompilerServices; namespace ReflectDynamics { class Program { static void Main() { var test = typeof(Test); CheckDynamic(test.GetField(“dynamicField”)); CheckDynamic(test.GetProperty(“DynamicProperty”)); CheckDynamic(test.GetProperty(“Item”)); MethodInfo dynamicMethod = test.GetMethod(“DynamicMethod”); CheckDynamic(dynamicMethod); CheckDynamic(dynamicMethod.GetParameters()[0]); Console.ReadKey(); } […]

DataGridView动态更改数据源

基本上当我创建这个DataGridView时,我有这个代码来填补它 public void fillDataGrid(IQueryable patients) { dgvMyPatients.DataSource = patients; dgvMyPatients.Columns[“Pat_Last_Name”].DisplayIndex = 0; dgvMyPatients.Columns[“Pat_First_Name”].DisplayIndex = 1; dgvMyPatients.Columns[“Pat_Middle_Name”].DisplayIndex = 2; dgvMyPatients.Columns[“Pat_First_Name”].HeaderText = “First Name”; dgvMyPatients.Columns[“Pat_Last_Name”].HeaderText = “Last Name”; dgvMyPatients.Columns[“Pat_Middle_Name”].HeaderText = “Middle Name”; } public IQueryable showMyPatients() { DbClassesDataContext myDb = new DbClassesDataContext(dbPath); var patientInfo = from patients in myDb.PatientInfos where patients.Phy_ID == physcianID select patients; return patientInfo; […]

当存在非静态,更合适的方法时,如何使用动态参数调用静态方法?

受此问题的启发,我在Mono 2.10.9和Visual Studio 2010上尝试了以下代码: public class Example { public static void Main() { Foo(1); } public static void Foo( dynamic x ) { Example.Bar(x); } static void Bar( dynamic x ) { x++; } int count; void Bar( int x ) { count++; } } 如您所见, Foo是静态的,因此它只能访问静态Bar – 我明确地调用静态版本! 我知道我无法声明static void Bar( int x ) […]

FindControl和动态创建控件的麻烦

示例代码: var div = new HtmlGenericControl(“div”); div.Controls.Add(new Literal() { ID = “litSomeLit” }); var lit = (Literal)div.FindControl(“litSomeLit”); Assert.IsNotNull(lit); 此代码未通过断言,因为lit为null。 调试显示div.Controls肯定包含ID为“litSomeLit”的文字。 我的问题是“为什么?” 并且“有没有办法获得对特定ID的控制,而不是一次手动一个元素递归搜索div.Controls []?” 我这样做的原因是我的实际应用并不那么直接 – 我正在编写的一种方法在一些可能的配置中给出了一个带有几个子控件的复杂控制。 我需要访问几个层的特定控件(例如,ID为“txtSpecificControl”的控件可能位于StartingControl.Controls[0].Controls[2].Controls[1].Controls[3] )。 通常我可以做FindControl(“txtSpecificControl”) ,但是当控件刚刚动态创建时(例如上面的示例代码中),这似乎不起作用。

C#4:确定动态调用中的参数传递语义

在C#4中,当从DynamicObject派生并覆盖TryInvokeMember时,如何确定在调用站点提供的任何参数是否已通过out或ref语义传递? 我可以在提供的binder中看到包含此​​信息的一些私有字段(即Microsoft.CSharp.RuntimeBinder.ICSharpInvokeOrInvokeMemberBinder.ArgumentInfo属性),但它似乎无法访问。 我认为这些信息必须在某处可用,否则会严重限制一个人对所提供输入的了解。

如何动态生成文本框并收集用户输入的数据?

我将欣赏VB或C#中的答案 我们使用数据库来创建带有动态项的数据收集表单 我使用此代码从数据库中的表生成标签和文本框(当用户点击按钮“加载CRF”时) Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Dim CRFgrid As New GridView CRFgrid.DataSource = CRFds CRFgrid.DataBind() Dim ItemCount As Integer = CRFgrid.Rows.Count Session(“Itemcount”) = CRFgrid.Rows.Count For I = 0 To (ItemCount – 1) Dim itemname As String = CRFgrid.Rows(0 + I).Cells(1).Text.ToString Session(“Item”) = “Item” + (I + […]

动态对象 – 运行时报告字段不存在但可以在调试器中看到它?

编辑:重启visual studio解决了这个问题没有代码更改。 我有一个ConfigSection处理程序,它使用动态类型和一个expando对象。 测试失败报告‘对象’不包含’SportName’的定义 。 我试图在控制台中复制,将ConfigSection处理程序排除在等式之外,但看起来像等效代码的工作正常。 我很难过。 请参阅下面的test,ConfigurationSectionHandler和config xml public class SportSection : IConfigurationSectionHandler { public object Create(object parent, object configContext, XmlNode section) { var doc = XDocument.Parse(section.OuterXml); var root = (XElement)doc.FirstNode; try { var sportList = root.Element(“sportList”).Elements(“sport”).Select(ToSport); dynamic config = new ExpandoObject(); config.SportList = sportList; return config; } catch (Exception ex) { throw new […]

C#动态通用列表

我想创建一个通用的List ,其类型在运行时声明。 我可以做到以下几点,但由于它是动态的,我怀疑存在速度惩罚。 我正在为异国情调的数据库编写一个包装器,因此速度至关重要。 List gdb = new List() 我在动态generics类型中阅读了这篇文章 ,但无法让它发挥作用。 具体来说,该对象不会显示为List,因此没有添加方法。 Type ac; switch (trail[dataPos].Type) { case GlobalsSubscriptTypes.Int32: ac = typeof(System.Int32); break; case GlobalsSubscriptTypes.Int64: ac = typeof(System.Int64); break; default: ac = typeof(System.String); break; } var genericListType = typeof(List); var specificListType = genericListType.MakeGenericType(ac); var gdb = Activator.CreateInstance(specificListType); 如何让gdb显示为以下之一: List List List

使用Dynamic而不是reflect来按名称调用方法

使用.NET-4.0,如何在不使用reflection的情况下使用Dynamic来完成以下操作? public void InvokeMethod(string methodName) { Type t = typeof(GCS_WebService); GCS_WebService reflectOb = new GCS_WebService(); MethodInfo m = t.GetMethod(methodName); m.Invoke(reflectOb, null); }

使用LINQ,是否可以从Select语句输出动态对象? 如果是这样,怎么样?

目前在LINQ中,以下编译和工作正常: var listOfFoo = myData.Select(x => new FooModel{ someProperty = x.prop1, someOtherProperty = x.prop2 }); public class FooModel{ public string someProperty { get; set; }; public string someOtherProperty { get; set; }; } 但是,过去几个版本的.NET / C#扩展了动态对象的作用,比如ExpandoObject ,我想知道是否有办法基本上这样做: var listOfFoo = myData.Select(x => new ExpandoObject{ someProperty = x.prop1, someOtherProperty = x.prop2 }); 显然,我已经尝试过上面的代码没有成功,但似乎我错过了一些东西。