首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >创建一个像ASP.NET MVC3 ViewBag这样的类?

创建一个像ASP.NET MVC3 ViewBag这样的类?
EN

Stack Overflow用户
提问于 2011-04-27 07:46:38
回答 5查看 7.3K关注 0票数 17

我有一个场景,我想做一些类似于在运行时创建属性的ASP.NET MVC3 ViewBag对象所做的事情?或者是在编译时?

无论如何,我想知道如何创建一个具有这种行为的对象?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-04-27 07:49:04

使用dynamic类型的对象。See this article获取更多信息。

票数 7
EN

Stack Overflow用户

发布于 2013-02-10 08:09:27

我创建了类似这样的东西:

代码语言:javascript
复制
public class MyBag : DynamicObject
{
    private readonly Dictionary<string, dynamic> _properties = new Dictionary<string, dynamic>( StringComparer.InvariantCultureIgnoreCase );

    public override bool TryGetMember( GetMemberBinder binder, out dynamic result )
    {
        result = this._properties.ContainsKey( binder.Name ) ? this._properties[ binder.Name ] : null;

        return true;
    }

    public override bool TrySetMember( SetMemberBinder binder, dynamic value )
    {
        if( value == null )
        {
            if( _properties.ContainsKey( binder.Name ) )
                _properties.Remove( binder.Name );
        }
        else
            _properties[ binder.Name ] = value;

        return true;
    }
}

然后你可以像这样使用它:

代码语言:javascript
复制
dynamic bag = new MyBag();

bag.Apples = 4;
bag.ApplesBrand = "some brand";

MessageBox.Show( string.Format( "Apples: {0}, Brand: {1}, Non-Existing-Key: {2}", bag.Apples, bag.ApplesBrand, bag.JAJA ) );

请注意,"JAJA“的条目从未创建过...并且仍然不抛出异常,只是返回null

希望这对某些人有帮助

票数 24
EN

Stack Overflow用户

发布于 2011-04-27 12:58:58

行为方面,ViewBag的行为与ExpandoObject非常相似,因此您可能想要使用它。然而,如果你想做自定义行为,你可以继承DynamicObject的子类。在使用这些类型的对象时,dynamic关键字很重要,因为它告诉编译器在运行时绑定方法调用,而不是在编译时绑定方法调用。但是,普通旧式clr类型上的动态关键字只会避免类型检查,不会为对象提供ExpandoObject或DynamicObject所用的动态实现类型功能。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5797778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档