Tag: 动态

dynamic和System.Object之间的区别

声明为dynamic的变量和声明为System.Object的变量之间有什么区别? 运行以下函数似乎表明两个变量都动态地转换为正确的类型: void ObjectTest() { System.Object MyTestVar = “test”; dynamic MyTestVar2 = “Testing 123”; Console.WriteLine(“{0}”, MyTestVar.GetType()); Console.WriteLine(“{0}”, MyTestVar2.GetType()); MyTestVar = 123; MyTestVar2 = 321; Console.WriteLine(“{0}”, MyTestVar.GetType()); Console.WriteLine(“{0}”, MyTestVar2.GetType()); }

如何将动态用作通用?

如何将动态作为通用使用? 这个 var x = something not strongly typed; callFunction(); 还有这个 dynamic x = something not strongly typed; callFunction(); 都产生这个错误 Error 1 The type or namespace name ‘x’ could not be found (are you missing a using directive or an assembly reference?) 我该怎么做才能使它足够合法用于 ?

C#4.0“动态”关键字是否会使generics多余?

我对C#中的动态特性感到非常兴奋( C#4动态关键字 – 为什么不呢? ),特别是因为在我的代码的某些库部分我使用了很多reflection。 我的问题有两个: 1.“动态”取代generics,如下所示? generics方法: public static void Do_Something_If_Object_Not_Null(SomeType ObjToTest) { //test object is not null, regardless of its Type if (!EqualityComparer.Default.Equals(ObjToTest, default(SomeType))) { //do something } } 动态方法(??): public static void Do_Something_If_Object_Not_Null(dynamic ObjToTest) { //test object is not null, regardless of its Type?? but how? if (ObjToTest != null) { //do […]

C#按属性名称动态访问属性值

我试图解决的问题是如何编写一个方法,该方法将属性名称作为字符串,并返回分配给所述属性的值。 我的模型类声明类似于: public class Foo { public int FooId public int param1 public double param2 } 从我的方法中,我希望做一些类似的事情 var property = GetProperty(“param1) var property2 = GetProperty(“param2”) 我目前正在尝试使用表达式,如 public dynamic GetProperty(string _propertyName) { var currentVariables = m_context.Foo.OrderByDescending(x => x.FooId).FirstOrDefault(); var parameter = Expression.Parameter(typeof(Foo), “Foo”); var property = Expression.Property(parameter, _propertyName); var lambda = Expression.Lambda<Func>(parameter); } 这种方法是否正确,如果是这样,是否可以将其作为动态类型返回? 答案是正确的,这使得这太复杂了。 解决方案现在是: […]

如何动态创建选项卡

这是在C# 我需要从textbox.Text基本上制作TabPages,例如: textBox1.Text = “test”; TabPage textBox1.Text = new TabPage(); 这就是我想做的事情..我知道这不会直接起作用,但是这应该让你知道我想如何创建tabPages ..然后我希望以后也可以调用它们,例如: String browser = “browser 1”; (textBox1.Text as TabPage).Controls.Add(WebBrowser browser) 我需要所有的名称都是动态的,因为这将是一个可以运行客户帐户测试的程序会有一个TabControl,它具有“帐号作为tabPage控件名称,然后在每个tabPages中将是另一个TabControl在其自己的选项卡中设置每个invidivual测试的选项卡。所以Tabs中的选项卡基本上都是。

动态+ linq编译错误

我会在前面说我在动态数据上使用linq做了一些非常可怕的事情。 但我无法弄清楚为什么这个查询无法编译: 错误1属性’ h__TransparentIdentifier0’不能与类型参数一起使用 公共课程 { public static void Main(string [] args) { var docs = new dynamic [0]; var q =来自docs中的doc doc [“@ metadata”] [“Raven-Entity-Name”] ==“Cases” doc.AssociatedEntities!= null 来自doc.AssociatedEntities中的实体 其中entity.Tags!= null //编译器错误在这里 来自entity.Tags中的标签 其中tag.ReferencedAggregate!= null 选择新的{tag.ReferencedAggregate.Id,doc .__ document_id}; } } 公共静态类LinqOnDynamic { private static IEnumerable 选择(此对象为self) { if(self == null) 产量突破; if(self是IEnumerable == false […]

有没有办法通过字符串或索引访问Dapper FastExpando中的列?

我正在使用Dapper FastExpando对象,并希望能够在运行时而不是在设计/编译时动态引用列名。 所以我希望能够做到以下几点: var testdata = conn.Query(“select * from Ride Where RiderNum = 21457”); 我希望能够做到以下几点: foreach( var row in testdata) { var Value = row[“PropertyA”]; } 我明白我能做到: var Value = row.PropertyA; 但我不能这样做,因为我需要的属性名称直到运行时才会知道。 这个SO问题的答案不起作用。 我仍然得到相同的Target Invocationexception。 所以… 有没有办法用Dapper FastExpando做我想做的事情?

System.Linq.Dynamic – 我可以在WHERE语句中使用IN子句

我有动态linq WHERE声明: dataContext.Table.Where(“id = 0 Or id = 1 Or id = 2 Or …”); 我想改变: dataContext.Table.Where(“id IN (0, 1, 2, …)”); 但它不起作用。 我怎样才能获得更好的性能呢?

通过动态引用访问嵌套类的成员时发生StackOverflowException

我已经定义了一个派生自BindingList的generics类,并且有一个嵌套的非generics类: class Generic : BindingList<Generic.Inner> { public class Inner { public object Foo { get; set; } } } 尝试通过动态引用访问Value属性时,mscorlib中发生StackOverflowException ,如下所示: dynamic d = new Generic.Inner(); var value = d.Foo; // StackOverflowException var value = d.Bar // StackOverflowException as well, not a // ‘RuntimeBinderException’ like you would expect when // trying to access a non-existing […]

使用’var’和’dynamic’时的exception

我在Anomaly上碰到了一点,这是第一次使用var关键字我。 采用这种非常简单的方法 public static Int32? GetNullableInt32(Int32 num) { return new Nullable(num); } 现在我们可以使用dynamic参数调用此方法,一切都将按预期工作。 public static void WorksAsAdvertised() { dynamic thisIsAnInt32 = 42; //Explicitly defined type (no problems) Int32? shouldBeNullableInt32 = GetNullableInt32(thisIsAnInt32); Console.Write(shouldBeNullableInt32.HasValue); } 但是,通过使用隐式类型声明shouldBeNullableInt32 ,结果远非我所期望的。 public static void BlowsUpAtRuntime() { dynamic thisIsAnInt32 = 42; //Now I’m a dynamic{int}… WTF!!! var shouldBeNullableInt32 = GetNullableInt32(thisIsAnInt32); //Throws a […]