Tag: dynamic keyword

如何在运行时创建一系列编号变量?

朋友们,我必须创建一系列ArrayList ,每个包含未知来源的对象 ,每个实例都分配给一个单独的局部变量。 到目前为止,这么好……但我还需要每个局部变量的名称遵循一个非常具体的模式:名称应以“oArr”开头,后跟一个或多个数字反映特定数组在序列中的位置。 此外,我不会在编译时知道有多少这些数组 – 因此,我需要多少局部变量! 令我感到震惊的是,这可能是一个问题,可以通过C#4.0中动态类型的可用性来解决,但我对它们的使用并不熟悉。 我怎么能拿这样的代码…… int i=0; foreach(something) { ArrayList oArr+i=new ArrayList(); i++; } …并将其转换为符合上述标准并实际编译的内容? 或者,是否有一个更简单,理智的方法来解决这个问题?

C#中动态类型的限制

你能给我一些C#中动态类型限制的原因吗? 我在“Pro C#2010和.NET 4平台”中读到了它们。 这是一段摘录(如果在这里引用书籍是非法的,请告诉我,我将删除摘录): 虽然可以使用dynamic关键字定义很多东西,但是它的使用存在一些限制。 虽然它们不是show stoppers,但要知道动态数据项在调用方法时不能使用lambda表达式或C#匿名方法。 例如,以下代码将始终导致错误,即使目标方法确实采用了一个带有字符串值并返回void的委托参数。 dynamic a = GetDynamicObject(); // Error! Methods on dynamic data can’t use lambdas! a.Method(arg => Console.WriteLine(arg)); 要绕过此限制,您需要使用第11章(匿名方法和lambda表达式等)中描述的技术直接使用底层委托。 另一个限制是动态数据点无法理解任何扩展方法(参见第12章)。 不幸的是,这还包括来自LINQ API的任何扩展方法。 因此,使用dynamic关键字声明的变量在LINQ to Objects和其他LINQ技术中的使用非常有限: dynamic a = GetDynamicObject(); // Error! Dynamic data can’t find the Select() extension method! var data = from d in a select d; […]