Tag: 动态

动态对象智能感知

如果动态在编译时解析为对象,并且所有.NET类型都扩展了对象,为什么动态不像IntelliSense的对象那样? 每当我使用动态时,我都会收到一条消息“动态表达式。这将在运行时解决”。 当然它也应该显示对象成员?

使用动态对象时的RuntimeBinderException

我觉得我错过了一些明显的东西,所以请随意向我指出。 我有一个简单的unit testing来说明我的问题: [Test] public void DynamicTest() { dynamic myDynamic = new ExpandoObject(); myDynamic.Prop = “abc”; Assert.AreEqual(“abc”,myDynamic.Prop); } 当我执行unit testing时,它会通过。 到现在为止还挺好。 如果我选择调试unit testing(在调试 – > VS中的例外情况下勾选所有CLRexception),我会看到一个RuntimeBinderException: 它不是致命的,所以我可以击中F5继续并且测试仍然通过,但这似乎是错误的。 我在这里做错了吗? 在我们的应用程序的一般使用过程中获取这些exception非常烦人。 或者我应该解开RuntimeBinderException的框并忽略它?

C#Newtonsoft.Json.Linq.JValue总是返回Int64

我使用Newtonsoft.Json程序集将Json字符串反序列化为动态对象(ExpandoObject)。 我遇到的问题是int值总是作为Int64返回,我期待Int32。 代码如下所示。 namespace Serialization { using System; using System.Collections.Generic; using System.Dynamic; using System.Linq; using Newtonsoft.Json; using Newtonsoft.Json.Linq; public static class JsonSerializer { #region Public Methods public static string Serialize(dynamic obj) { return JsonConvert.SerializeObject(obj); } public static dynamic Deserialize(string s) { var obj = JsonConvert.DeserializeObject(s); return obj is string ? obj as string : Deserialize((JToken)obj); […]

像C#中的属性字典一样处理对象

我希望能够使用属性的名称作为键来访问像字典这样的对象中的属性值。 我不关心值是否作为对象返回,因此Dictionary很好。 这是预期用途: object person = new { Name: “Bob”, Age: 45 }; IDictionary lookup = new PropertyDictionary(person); string name = (string)person[“Name”]; person[“Age”] = (int)person[“Age”] + 1; // potentially editable 我本来要为此实现我自己的类,但后来我开始注意像DynamicObject这样的类实现了IDictionary接口,这让我觉得这已经在某个地方为我做了。 我想要的是类似于ASP.NET MVC使用的function,允许使用匿名类型来设置HTML标记属性。 我有很多使用字典作为数据源的类,但大多数时候我也应该能够传入对象。 因为这是一个通用库 ,我想我会创建一个可重用的类,只使用IDictionary接口装饰一个对象。 它将使我免于造成过载的爆炸。

C#将控件添加到循环中的面板

我希望为文件中的每一行添加一个按钮。 到目前为止我的代码是: StreamReader menu = new StreamReader(“menu.prefs”); int repetition = 0; while(!menu.EndOfStream) { Button dynamicbutton = new Button(); dynamicbutton.Click += new System.EventHandler(menuItem_Click); dynamicbutton.Text = menu.ReadLine(); dynamicbutton.Visible = true; dynamicbutton.Location = new Point(4+repetition*307, 4); dynamicbutton.Height = 44; dynamicbutton.Width = 203; dynamicbutton.BackColor = Color.FromArgb(40,40,40); dynamicbutton.ForeColor = Color.White; dynamicbutton.Font = new Font(“Lucida Console”, 16); dynamicbutton.Show(); menuPanel.Controls.Add(dynamicbutton); repetition++; MessageBox.Show(dynamicbutton.Location.ToString()); […]

在ASP.NET MVC 3中以编程方式创建routeValues(匿名类型)

假设我们有一个页面,其中包含一些支持从DB搜索的元素,因此在Post Action中我们需要找到哪些元素是活动的,并根据这些创建路由值,如下所示: List SearchParameters = GetFilterParameters(collection); if(SearchParameters.Count > 0) foreach(Parameter item in SearchParameters) { switch(item.Name) { case “Category”: CategoryValue= item.Value; break; case “StartDate”: StartDateValue= item.Value; break; case “Product”: ProductValue= item.Value; break; } return RedirectToAction(“Index”, new {category = CategoryValue, startdate=StartDateValue, product=ProductValue }); 那么有没有办法动态定义routeValues类似于以下Pseudo-Code: var dynamicRoutValues; foreach(Parameter item in SearchParameters) { dynamicRoutValues.Add(item.Name, item.Value) } return RedirectToAction(“Index”, dynamicRoutValues);

在C#中使用“dynamic”来实现访问者模式

我有一个应用程序,我在一系列元素上执行操作,操作的确切性质取决于所操作元素的类型。 由于封装的原因,元素不适合实现操作; 这意味着它不能是元素类型的虚方法,所以’标准’多态不起作用。 我提出了一个与之相关的问题 ,并被告知这被称为访客模式。 我以前总是使用基于对象类型的if/elseif调度程序方法实现它,然后调用适当的实现。 然而,最近,我注意到同样的事情可能是使用dynamic关键字完成,如下所示: private void ReconcileTips() { foreach (var step in _definition.Steps) { ReconcileTips((dynamic)step); } } private void ReconcileTips(IBulkDispenseDefinition bulkDispense) { bulkDispense.TipType = ReconcileTip(bulkDispense.TipType); } private void ReconcileTips(ImportScreenDefinition importScreen) { foreach (var usage in importScreen.ReagentUsages) usage.TipType = ReconcileTip(usage.TipType); } private void ReconcileTips(BuildScreenDefinition buildScreen) { foreach (var function in buildScreen.Functions) function.TipType = […]

使用接口inheritance时,为什么动态绑定失败?

在C#中,有谁知道为什么我不能做以下事情? (特别是下面标有“不好!”的行) interface A { void Add(dynamic entity); } interface B : A {} class C : B { public void Add(dynamic entity) { System.Console.WriteLine(entity); } } class Program { static void Main(string[] args) { B b = new C(); dynamic x = 23; b.Add(23); // fine b.Add((int)x); // fine (b as A).Add(x); // fine […]

您可以在.NET中的运行时更改动态Web引用的位置/端点吗?

以一种相当标准的方式,我在Jira中创建了一个Web服务的Web引用,用于我正在构建的扩展(Jira是一个不熟悉它的问题跟踪器)。 Visual Studio自动生成.Settings文件和包含Web服务URL的app.config 。 由于我正在为我们正在构建的ALM产品开发扩展/插件,扩展的消费者将最终决定此Web服务指向的位置,因为它将与消费者的Jira实例集成。 假设将从数据库中存储和提取Web服务URL。 如何让自动生成的服务使用数据库中的URL而不是生成的app.config ? 注意:我们使用的是框架的v2.0,因此WCF不是一个选项。

C#4.0’动态’关键字的优缺点?

我已经学习并检查了C#4中dynamic关键字的优点。 任何人都可以告诉我这个的缺点。 意味着dynamic vs Var / Object / reflection ??? 哪个更重要。 在运行时dynamic更强大?