Tag: 动态

C#4.0:将动态转换为静态

这是一个与我在这里问到的另一个相关的分支问题。 我把它分开是因为它真的是一个子问题: 我很难将类型为dynamic的对象转换为另一个(已知的)静态类型。 我有一个执行此操作的ironPython脚本: import clr clr.AddReference(“System”) from System import * def GetBclUri(): return Uri(“http://google.com”) 请注意,它只是新建了一个BCL System.Uri类型并返回它 。 所以我知道返回对象的静态类型 。 现在在C#land,我正在新建脚本托管的东西,并调用此getter返回Uri对象: dynamic uri = scriptEngine.GetBclUri(); System.Uri u = uri as System.Uri; // casts the dynamic to static fine 没问题。 我现在可以使用强类型的Uri对象,就像它最初静态实例化一样。 然而…. 现在我想定义我自己的C#类,它将在动态范围内进行新建,就像我对Uri一样。 我简单的C#类: namespace Entity { public class TestPy // stupid simple test class of […]

访问动态创建的控件c#asp.net的值

我正在尝试访问所选radioButton的值。 我有一个单选按钮的列表由子标题分隔(因此我没有使用radioList) 我不知道如何访问所选的值,因为我不知道它是动态的给出了什么名称。 以下代码位于for循环中并输出无线电选项。 所有选项均适用于一个必需的用户选择。 //add list to radio button list RadioButton button1 = new RadioButton { GroupName = “myGroup”, Text = singleType.appTypeName, ID = singleType.appTypeID.ToString() }; radioArea.Controls.Add(button1); myLabel = new Label(); myLabel.Text = “”; radioArea.Controls.Add(myLabel); 这是我试图访问它的方式: RadioButton myButton = (RadioButton) radioArea.FindControl(“myGroup”); 我意识到这应该是非常简单的,但我仍然处于非常PHP的心态,并感谢任何帮助。 谢谢

动态C#.NET Web服务

我在C#ASP.NET项目中使用一个类来允许用一些随机脚本语言编写的脚本动态地公开webservice方法 – 换句话说,脚本应该能够公开任何具有任何签名的任何名称的方法(只要因为它通过这个SOAP接口对外界是有效的(能够随意添加和删除它们,而不需要硬代码更改),因此我需要能够在C#中创建一个Web服务类,同时能够在运行时动态添加和删除方法。 现在,到目前为止我能够提出的最好的计划是(运行时)生成C#代码来表示web服务,使用System.Reflection.Emit编译它然后在运行时加载程序集 – 所有这些都是脚本添加的或从服务中删除方法(不应经常发生,请注意)。 有没有人有比这更好的主意?

使用对象初始值设定项创建实例的表达式

有没有办法用对象初始化器和表达式树创建对象的实例? 我的意思是创建一个表达式树来构建这个lambda: // my class public class MyObject { public bool DisplayValue { get; set; } } // my lambda: var lambda = (Func) (displayValue => new MyObject { DisplayValue = displayValue }); 如何使用表达式树创建此lambda? 更新: 我试着自己编写以下代码: public static Func Creator; static void BuildLambda() { var expectedType = typeof(MyObject); var displayValueParam = Expression.Parameter(typeof(bool), “displayValue”); var ctor […]

为什么只有第一个RadioButton被添加到GroupBox?

我试图动态创建Windows控件并将其添加到Panel。 对于Button和Checkbox,这个工作正常; 我遇到了GroupBox的问题,但里面有RadioButtons。 创建第一个RadioButton元素并将其添加到预期位置的GroupBox中,但是虽然表面上是创建的(通过代码逐步执行,但是它们是不可见的)。 我认为,如果随后的RadioButton被放在前面的那个上面,那么最后一个就是看到的那个。 这就是它的样子: 每个〜-delimited val应该是radioButton的文本值,但只显示一个。 我是否需要为后续的RadioButtons显式提供位置值,或者为什么会失败? 这是代码: private GroupBox getGroupBox(string currentSettings, int curLeftVal) { // “apple~orange~peach~True (must look for “enclose group in a black box” as the last val (ignore for the quick-and-dirty mockup, though)) List grpbxVals = new List(currentSettings.Split(‘~’)); GroupBox gb = new GroupBox(); gb.Height = 60; gb.Location = new Point(curLeftVal, […]

在ASP.NET WebPages中使用带有匿名类的LINQ和隐式类型化数组时出错

我正在尝试使用WebPatrix使用WebPages来模拟页面。 我已经为其中一个PageData键分配了一个隐式类型的匿名对象,但是当我尝试在集合上使用LINQ方法时,我收到以下错误: CS1977: Cannot use a lambda expression as an argument to a dynamically dispatched operation without first casting it to a delegate or expression tree type 以下是一些示例代码: @{ PageData[“Vals”] = new [] { new { ID=1, Quantity=5 }, new { ID=2, Quantity=3 } }; var sum = PageData[“Vals”].Sum(x => x.Quantity); } 如果我首先将数组存储在常规对象中,我可以使用它上面的LINQ方法。 当它作为一个动态对象从PageData出来时似乎有一个问题 – […]

方法参数和返回类型的动态vs对象关键字

一个非常基本的问题,请考虑以下方法: public object Foo(object bar) {… } VS public dynamic Bar(dynamic bar) {… } 虽然实际上我没有像这样的方法签名,但为了简洁起见,这个例子简化了两个方面:方法参数和return的’dynamic vs object’关键字。 这两种方法有什么区别,它会产生相同的IL还是会产生任何性能影响? 基于参考/工作/示例,告诉动态就像添加了动态特性的对象一样,我想两者都是相同的东西,但只是根据使用情况而有所不同,就像我想在返回值上添加另一个动态属性/方法一样。 但是我仍然想知道是否还有其他重要的事情需要考虑。 请注意,如果我有一个具有上述Bar方法的类并使用如下方法签名实现接口(反之亦然),则编译器不会抱怨任何内容。 object Bar(object bar); 经过大约3年的存在,我才有机会在项目中使用动态function,例如创建动态存储库以供Web API使用并生成(动态)JSON。 public interface IRepository { IEnumerable GetAll(string entityName, int skip, int take); int Count(string entityName); dynamic GetById(string entityName, int key); void Add(string entityName, dynamic entity); void Remove(string entityName, int key); […]

C# – 动态添加对象(添加动态属性名称)

我正在尝试创建一些动态的ExpandoObject 。 我遇到了一个问题。 由于我不知道我的对象中这些不同属性的名称应该是什么,我不能这样做: var list = new ArrayList(); var obj = new ExpandoObject(); obj.ID = 1, obj.Product = “Pie”, obj.Days = 1, obj.QTY = 65 list.Add(obj); 让我解释一下我的情况:我希望从随机数据库中获取数据(我不知道哪个,但是根据我从UI获得的信息构建连接字符串),因此我不知道需要获取哪些数据。 这可能是数据库表的一个例子 表销售 ID:int, 产品:nvarchar(100), 天:int, 数量:bigint 这可能是另一个例子: 表Foobar Id:int, 天:int 数量:bigint Product_Id:int Department_Id:int 如您所见,我不知道数据库的外观(这是100%匿名,因此它需要100%动态),我想要返回的数据应该看起来像一个构造良好的JSON,如下所示: [ { “ID”: 1, “Product”: “Pie” “Days”: 1, “QTY”: 65 }, { “ID”: […]

访问动态创建的文本框文本

我偶然发现了我的asp.net表单问题。 在我的表单中,最终用户选择了一些动态创建的文本框 ,这一切都可以正常使用以下代码: protected void txtAmountSubmit_Click(object sender, EventArgs e) { int amountOfTasks; int.TryParse(txtAmountOfTasks.Text, out amountOfTasks); for (int i = 0; i < amountOfTasks; i++) { TextBox txtAddItem = new TextBox(); txtAddItem.ID = "txtAddItem" + i; txtAddItem.TextMode = TextBoxMode.MultiLine; questionNine.Controls.Add(txtAddItem); txtList.Add(txtAddItem.ID); } } 然而,这也给我带来了一个小问题,稍后在我的表单上单击提交按钮,我将结果发送给它需要去的指定人员(使用smtp电子邮件)。 这部分很好, 直到我试图从这些动态创建的文本框中检索文本 。 我试过的 我已经尝试使用这个msdn访问服务器控件ID方法但是这不起作用。 我试图将这些新文本框添加到列表中,但是我不确定如何在文本框中包含文本时更新这些文本框。 因此,我的结果因此而返回null。 我也查了关于SO的其他问题,比如这些,但是它们通常用于WPF或winforms,而不是我的asp.net问题(这通常不是问题,但我不需要从每个人那里得到文本我的页面中的文本框控件,只是动态创建的控件。 我也试过改变我调用代码的方式,我希望它能起作用: string textboxesText = […]

在运行时使用Type变量创建Type类型

我正在尝试简化我在一个函数中创建几个变量的方法,这个变量针对不同的类型和不同的动作重复,最终我将迁移到一个可以处理多种类型的函数,但我正在分阶段进行。 我希望能够在其类型而不是列表中创建对象列表,而无需在任何地方复制/粘贴对象类型。 我曾希望通过一些非常简单的事情来实现这一目标 Type t = typeof(LinkAddy); var x = List(); 但这不编译。 然后我尝试了以下答案提供的另一种解决方案: 存储变量类型并使用它在运行时创建集合 static IList createGenericList(Type typeInList) { var genericListType = typeof(List).MakeGenericType(new[] { typeInList }); return (IList)Activator.CreateInstance(genericListType); } 和 static List createGenericList() { List genericListType = new List(); return genericListType; } 所以这里有不同的方法和结果: Type ThisType = typeof(LinkAddy); // The normal list method, means I have […]