Tag: dynamic

首先反映动态类型以告知它是否是动态类型

有没有一种方法可以判断对象被分配的类型是动态类型? 例如: dynamic foo = GetCat(); Console.WriteLine( (foo is Cat).ToString() ); // will print True because // at the execution time, foo will have assumed the Cat type. However, is // there a mechanism by which I can reflect on foo and say, “This guy was assigned // a dynamic type, to begin with.”?

在Silverlight应用中使用“dynamic”关键字时出错

我收到以下错误:“无法找到编译动态表达式所需的一个或多个类型。您是否缺少对Microsoft.CSharp.dll和System.Core.dll的引用” 我有System.Core.dll,我有没有找到Microsoft.CSharp? 它不是项目的一部分,也不在参考列表中。

GetOriginalTypeParameterType throws未将对象引用设置为对象exception的实例

参考: 动态如何用作通用? public void CheckEntity(int entityId, string entityType = null) { dynamic AnyObject = Activator.CreateInstance(“Assembly”,”Assembly.Models.DbModels.” + entityType).Unwrap(); CheckWithInference(AnyObject, entityId); } private static void CheckWithInference(T ignored, int entityId) where T : class { Check(entityId); } private static void Check(int entityId) where T : class { using (var gr = new GenericRepository()) { } } 这与CheckEntity(16,”Container”);一起进入CheckEntity(16,”Container”); 。 […]

MongoDB C#驱动程序使用动态对象进行序列化

我有一个看起来像这样的模型: public class Record { public Record() { Created = DateTime.Now; } public string Id { get; set; } public string ApplicationId { get; set; } public Dictionary Values { get; set; } public DateTime Created { get; set; } } 使用MongoDB C#驱动程序存储在MongoDB中。 当我做以下事情时,这很有效: { applicationId: “52f52db8008a280f583c9ff6”, values: { “52f9410a324e68055f39f8c0”: 245234 “52f941096d82a531e700e56b”: “sdfasdf” “52fa4a96e0b2e0d4e61d0a03”: “52fa4a9b91c477e367ab99e6” […]

如何在动态类型的C#4.0中调用静态方法?

在C#4.0中,我们有动态类型,但是如何调用动态类型对象的静态方法? 下面的代码将在运行时生成exception。 动态对象来自C#类,但它可以是通过DLR来自其他语言的对象。 关键不在于如何调用静态方法,而是如何调用无法在C#代码中创建的动态对象的静态方法。 class Foo { public static int Sum(int x, int y) { return x + y; } } class Program { static void Main(string[] args) { dynamic d = new Foo(); Console.WriteLine(d.Sum(1, 3)); } } 恕我直言, 动态是发明桥接C#和其他编程语言。 还有一些其他语言(例如Java)允许通过对象而不是类型来调用静态方法。 顺便说一下,与C#3.0相比,C#4.0的引入并不那么令人印象深刻。

奇数行为随var,dynamic和linq组合而变化

我(懒惰地)在下面的代码的原始版本中使用了var ,并在代码的完全不同的部分中获得了一个奇怪的运行时exception。 将“var”更改为“int”修复了运行时exception,但我不明白为什么。 我把代码煮到了这个例子; public class Program { private static List Test(string i) { return new List {i}; } private static dynamic GetD() { return 1; } public static void Main() { int value1 = GetD(); // <– int var result1 = Test("Value " + value1); // No problem, prints "Value 1", First() on List […]

动态添加属性到动态对象?

我有这个 dynamic d = new ExpandoObject(); d.Name = attribute.QualifiedName.Name; 所以,我知道d将有一个属性Name。 现在如果我在编译时不知道属性的名称,我该如何将该属性添加到动态。 我发现了这个问题 所以,有一个复杂的调用绑定器等概念……首先很难得到它。这样做的更简单的方法是什么?

是否可以使用变量/动态字段集在C#中声明匿名类型?

在C#中,我想弄清楚是否可以声明一个匿名类型,其中字段在运行时才知道。 例如,如果我有一个键/值对列表,我可以根据该列表的内容声明一个匿名类型吗? 我正在使用的具体情况是将参数传递给Dapper,我不知道我将提供多少参数。 List<Tuple> paramList = new List<Tuple>() { new Tuple(“key1”, “value1”), new Tuple(“key2”, “value2”) … }; 我想将此List(或等效的Map)转换为匿名类型,我可以将其作为查询参数传递给Dapper。 理想情况下,如果将以上列表定义为匿名类型,则上面的列表最终会显示如下: new { key1=value1, key2=value2, … } 我在StackOverflow上看到了几个问题,询问在声明它们之后扩展匿名类型(“extendo objects”),或者在创建对象后声明任意字段,但我不需要这样做……我只是需要一次性地动态声明类型。 我怀疑它是否需要一些花哨的反思,如果可能的话。 我的理解是编译器在编译时为引擎定义了一个匿名类的类型,所以如果该类的字段在运行时才可用,我可能会运气不好。 实际上,我的用例实际上与使用“extendo对象”来定义任意字段无关。 或者,如果有人知道将查询参数传递给Dapper的更好方法(而不是声明一个匿名类),我也很想知道这一点。 谢谢! UPDATE 抱歉延迟回到这个! 这些答案都很棒,我希望我能给大家一点。 我最终使用了jbtule的解决方案(由Sam Saffron编辑),将IDynamicParameters传递给Dapper,所以我觉得我必须给他答案。 其他答案也很好,并回答了我提出的具体问题。 我非常感谢大家的时间!

Reflect.Emit Dynamic Type Memory Blowup

使用C#3.5我试图在运行时使用reflection发射生成动态类型。 我使用Microsoft的Dynamic Query Library示例创建了一个类生成器。 一切正常,我的问题是100个生成的类型使内存使用量膨胀大约25MB。 这是一个完全不可接受的内存配置文件,因为最终我想支持在内存中生成数十万种类型。 内存分析显示内存显然是由各种System.Reflection.Emit类型和方法持有,虽然我无法弄清楚原因。 我没有找到其他人谈论这个问题所以我希望这个社区中的某个人知道我做错了什么或者这是否是预期的行为。 下面的受控示例: using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.Reflection.Emit; namespace SmallRelfectExample { class Program { static void Main(string[] args) { int typeCount = 100; int propCount = 100; Random rand = new Random(); Type dynType = null; SlimClassFactory scf = new SlimClassFactory(); for (int i […]

你将如何使用C#4动态类型?

C#4将包含一个新的dynamic关键字,它将动态语言function引入C#。 您打算如何在自己的代码中使用它,您会提出什么样的模式? 您当前项目的哪一部分会使您的代码更清晰或更简单,或启用您可能根本无法执行的操作(在IronRuby或IronPython等动态语言之间的明显互操作之外)? PS:如果你不喜欢这个C#4,请避免负面评论。 编辑:重新发现问题。 动态的经典用法是大多数stackoverflow C#用户所熟知的。 我想知道的是,如果你想到特定的新C#模式,可以有效地利用动态而不会失去太多的C#精神。