之间有什么区别System.Dynamic.ExpandoObject,System.Dynamic.DynamicObject和dynamic?
在哪些情况下你使用这些类型?
我收到的错误是:
'object'不包含'Title'的定义
所有代码也在github上
我有一个看起来像这样的ConsoleApplication1
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Movie m = new Movie();
var o = new { Title = "Ghostbusters", Rating = "PG" };
Console.WriteLine(m.PrintMovie(o));
}
}
}
Run Code Online (Sandbox Code Playgroud)
和Movie.cs
public class Movie : DynamicObject
{
public string PrintMovie(dynamic o)
{
return string.Format("Title={0} Rating={1}", o.Title, o.Rating);
}
}
Run Code Online (Sandbox Code Playgroud)
它可以在SAME项目中正常工作,但如果我添加ConsoleApplication2并引用ConsoleApplication1并添加Exact相同的代码
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
Movie m = new Movie();
var o = new { Title …Run Code Online (Sandbox Code Playgroud) 我正在尝试学习C#4.0附带的所有新东西.我无法理解DynamicObject和ExpandoObject类型之间的差异.它似乎DynamicObject用于例如当您想要从Python脚本访问变量以及ExpandoObject与COM/Office对象交谈时.我对吗?它们的用途有何不同?
我正在尝试理解DynamicObject类型.发现这篇MSDN文章非常简洁明了,如何创建和使用DynamicObject:
http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject.aspx
本文包含一个继承自DynamicObject的简单DynamicDictionary类.
现在我想迭代我动态创建的DynamicObject属性:
dynamic d = new DynamicDictionary();
d.Name = "Myname";
d.Number = 1080;
foreach (var prop in d.GetType().GetProperties())
{
Console.Write prop.Key;
Console.Write prop.Value;
}
Run Code Online (Sandbox Code Playgroud)
显然这不起作用.我想学习如何在不改变DynamicDictionary类的情况下做到这一点,因为我真的想学习如何将它用于从DynamicObject继承的各种现有对象.
需要反思吗?我肯定错过了什么...
如果我有一个动态对象或匿名对象,其结构与强类型对象的结构完全匹配,是否有.NET方法从动态对象构建类型化对象?
我知道我可以使用LINQ dynamicList.Select(dynamic => new Typed { .... }类型的东西,或者我可以使用Automapper,但我想知道是否没有专门为此构建的东西?
当我尝试为ViewBag分配值时,我收到以下错误:
无法将带有[]的索引应用于"System.Dynamic.DynamicObject"类型的表达式
我的代码如下:
public ActionResult Success()
{
ViewBag["SuccessBody"] = TempData["successBody"];
return View();
}
Run Code Online (Sandbox Code Playgroud)
PS:为什么我这样做你可能会问?因为我正在重定向到Success动作,所以我需要在重定向中保留的东西.然后,我将值分配给ViewBag,以便将值传递给"共享"视图.
我正在开发一个使用.NET Razor和mongodb的项目.我想做这样的事情:
@{
var feeds = DP.Database.GetCollection("feeds").FindAll();
}
<ul>
@foreach (dynamic feed in feeds)
{
<li>@feed.message - @feed.from.name</li>
}
</ul>
Run Code Online (Sandbox Code Playgroud)
但是,当前的mongodb C#驱动程序FindAll()返回不支持动态对象的BsonDocument集合.有人知道.NET 4动态支持的mongodb C#驱动程序吗?
非常感谢
我开始使用.Net中的动态对象,我无法弄清楚如何做某事.
我有一个继承自DynamicObject的类,我重写了TryInvokeMember方法.
例如
class MyCustomDynamicClass : DynamicObject
{
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
// I want to know here the type of the generic argument
}
}
Run Code Online (Sandbox Code Playgroud)
在该方法中,我想知道调用中泛型参数的类型(如果有的话).
例如,如果我调用以下代码,我想在动态对象的覆盖方法中获取System.Boolean和System.Int32的值
dynamic myObject = new MyCustomDynamicClass();
myObject.SomeMethod<bool>("arg");
myObject.SomeOtherMethod<int>("arg");
Run Code Online (Sandbox Code Playgroud)
目前,如果我在覆盖方法中放置一个断点,我可以得到被调用方法的名称("SomeMethod"和"SomeOtherMethod",以及参数的值,但不是泛型类型).
我怎样才能获得这些价值?
谢谢!
我可以定义一个派生自DynamicObject并支持接口(ICanDoManyThings)的类,而无需在接口中实现每个方法吗?
我正在尝试创建一个动态代理对象,并希望通过MyProxyClass.TryInvokeMember的实现来处理此类上的方法调用,这可能会也可能不会将它们传递给包装对象.
这可能吗?
谢谢
我正在寻找一种从动态对象中动态删除成员的方法(可能我们可以在这里使用Expando对象吗?).
好的,我想需要一点澄清......
当你这样做:
dynamic foo = new ExpandoObject();
foo.Bar = 42;
foo.Jar = 25;
Run Code Online (Sandbox Code Playgroud)
的Bar,"罐子"属性会在运行时动态添加.我向用户显示这个,他可能会进一步添加自己的属性(表单可用选项),这可以通过添加成员到动态对象来完成.
但他也可以从Foo对象中删除成员(比如'Jar'),我们如何删除成员表单动态对象?我们可以在这里使用Expando对象吗?
dynamicobject ×10
c# ×7
c#-4.0 ×4
dynamic ×4
.net ×3
asp.net-mvc ×1
generics ×1
mongodb ×1
viewbag ×1