Tag: 动态

动态JContainer(JSON.NET)并在运行时迭代属性

我在MVC4 / .NET4 WebApi控制器操作中收到一个JSON字符串。 动作的参数是dynamic因为我在接收端对接收到的JSON对象一无所知。 public dynamic Post(dynamic myobject) 自动解析JSON,生成的dynamic对象是Newtonsoft.Json.Linq.JContainer 。 我可以按照预期在运行时评估属性,因此如果JSON包含类似myobject.myproperty的内容,那么我现在可以获取接收的动态对象并在C#代码中调用myobject.myproperty 。 到现在为止还挺好。 现在我想迭代作为JSON的一部分提供的所有属性,包括嵌套属性。 但是,如果我执行myobject.GetType().GetProperties()它只返回Newtonsoft.Json.Linq.JContainer的属性而不是我正在寻找的属性(它们是JSON的一部分)。 知道怎么做吗?

C#动态类型问题

我只是遇到了最奇怪的事情,我有点心思=此刻… 下面的程序编译得很好,但是当你运行它时,当你尝试读取Value时会得到一个RuntimeBinderException 。 ‘object’ does not contain a definition for ‘Value’ class Program { interface IContainer { int Value { get; } } class Factory { class Empty : IContainer { public int Value { get { return 0; } } } static IContainer nullObj = new Empty(); public IContainer GetContainer() { return nullObj; } […]

如何动态添加按钮到我的表单?

当我点击button1时,我想在表单上创建10个按钮。 下面的代码没有错误,但它也不起作用。 private void button1_Click(object sender, EventArgs e) { List buttons = new List(); for (int i = 0; i < buttons.Capacity; i++) { this.Controls.Add(buttons[i]); } }

有没有办法在.net中动态执行字符串,类似于javascript中的eval()或sql中的动态sql?

有没有办法使用.net 2.0动态执行包含在字符串中的代码,方式与javascript中的eval()或tsql中的sp_executeSQL类似? 我在一个变量中有一个字符串值,我想在我的应用程序中的某个点操作 – 所以代码基本上是字符串操作。 我不知道将需要什么样的操作,所以我希望它们是可配置的。 我真的不关心动态代码编写的语言,无论是最容易实现还是编写简单。 例如,我可能想要替换’。’的实例。 带有’ – ‘的字符,或删除所有空格或类似字符。 如果我在sql中这样做我会使用动态sql,但我想在.net代码中执行它,如下所示: // Get the value to be manipulated string s = … // wherever s comes from // Get the manipulation code, eg this might come from a database // setting that can be changed without recompiling the .net code. string manipulation = Settings.GetSomeValue(“ManipulationSetting”); […]

XML Serialize动态对象

我需要使用以下格式从对象构造一组动态创建的XML节点: My Name Value 1 Value 2 DynamicValues -tag中的节点名称不是事先知道的。 我最初的想法是,这应该可以使用Expando对象 ,例如: [DataContract] public class Root { [DataMember] public string Name { get; set; } [DataMember] public dynamic DynamicValues { get; set; } } 通过使用值初始化它: var root = new Root { Name = “My Name”, DynamicValues = new ExpandoObject() }; root.DynamicValues.DynamicValue1 = “Value 1”; root.DynamicValues.DynamicValue2 = […]

如何在linq查询中添加动态“where”子句?

我有一个带有位掩码的User表,其中包含用户的角色。 下面的linq查询返回其角色包括1,4或16的所有用户。 var users = from u in dc.Users where ((u.UserRolesBitmask & 1) == 1) || ((u.UserRolesBitmask & 4) == 4) || ((u.UserRolesBitmask & 16) == 16) select u; 我想将其重写为下面的方法,以返回给定角色的所有用户,以便我可以重用它: private List GetUsersFromRoles(uint[] UserRoles) {} 关于如何动态构建我的查询的任何指针? 谢谢

Object,Dynamic和Var之间的区别

我需要知道这三个关键字Object , Dynamic和C#中的var之间的区别。 我看过这个链接,但我不明白在哪种情况下我必须使用每一个。 你能解释一下这些关键词之间的区别吗? 每个关键字的用途是什么?

具有多个/未知标准的动态linq查询

我希望实现一个系统,通过该系统“构建”条件,然后从数据库返回结果数据。 目前,有一个存储过程可以动态生成SQL并执行它。 这是我想要删除的特殊问题。 我的问题来自这样一个事实:我可以在我的标准中包含多个字段,并且对于每个字段,可能有一个或多个值,具有不同的潜在运算符。 例如, from t in Contacts where t.Email == “email@domain.com” || t.Email.Contains (“mydomain”) where t.Field1 == “valuewewant” where t.Field2 != “valuewedontwant” select t 字段,条件和运算符存储在数据库(和List )中,并且可能是这样的(基于上面); Email, Equals, “email@domain.com” Email, Contains, “mydomain” Field1, Equals, “valuewewant” Field2, DoesNotEqual, “valuewedontwant” 要么 new FieldCriteria { FieldName = “Email”, Operator = 1, Value = “email@mydomain.com” } 因此,使用我拥有的信息,我希望能够构建具有任意数量条件的查询。 […]

C#4.0’dynamic’不设置ref / out参数

我正在尝试使用DynamicObject 。 我尝试做的一件事是设置ref / out参数的值,如下面的代码所示。 但是,我无法正确设置Main()的i和j值(即使它们在TryInvokeMember()中设置正确)。 有没有人知道如何使用ref / out参数调用DynamicObject对象,并能够检索方法中设置的值? class Program { static void Main(string[] args) { dynamic proxy = new Proxy(new Target()); int i = 10; int j = 20; proxy.Wrap(ref i, ref j); Console.WriteLine(i + “:” + j); // Print “10:20” while expect “20:10” } } class Proxy : DynamicObject { private readonly […]

C# – 引用动态生成的程序集中的类型

我试图弄清楚当你动态生成程序集时是否可能引用先前动态生成的程序集中的类型。 例如: using System; using System.CodeDom.Compiler; using System.Reflection; using Microsoft.CSharp; CodeDomProvider provider = new CSharpCodeProvider(); CompilerParameters parameters = new CompilerParameters(); parameters.GenerateInMemory = true; CompilerResults results = provider.CompileAssemblyFromSource(parameters, @” namespace Dynamic { public class A { } } “); Assembly assem = results.CompiledAssembly; CodeDomProvider provider2 = new CSharpCodeProvider(); CompilerParameters parameters2 = new CompilerParameters(); parameters2.ReferencedAssemblies.Add(assem.FullName); parameters2.GenerateInMemory = […]