2

ここでexpando オブジェクトに関する記事を読みましたが、別のことを達成したいと考えています。
実行時に動的プロパティを持つプロパティオブジェクトを追加し、それに値を入れてから後で取得したい:

    private static readonly ConditionalWeakTable<object, ExpandoObject> props = new ConditionalWeakTable<object, ExpandoObject>();
    public static void AddDataExtension(this object key, dynamic value)
    {
        props.Add(key, value);
    }

    public static dynamic GetDataExtension(this object key)
    {
        ExpandoObject ex = null;
        return props.TryGetValue(key, out ex);
    }  

使用法:

'Insert data at runtime'
instance.AddDataExtension("Hello", "hi");

'Get the data at runtime'
instance.GetDataExtension("Hello")  

しかし、私はこのエラーを受け取ります:

The best overloaded method match for 'System.Runtime.CompilerServices.ConditionalWeakTable<object,System.Dynamic.ExpandoObject>.Add(object, System.Dynamic.ExpandoObject)' has some invalid arguments  

このプロパティを悪用したと思いますが、これを達成することは可能ですか? はいの場合、どのように?助けてください。

編集

完全なクラスは次のとおりです。

public static class instance
{
    private static readonly ConditionalWeakTable<object, ExpandoObject> props = new ConditionalWeakTable<object, ExpandoObject>();
        public static void AddDataExtension(this object key, dynamic value)
        {
            props.Add(key, value);
        }

        public static dynamic GetDataExtension(this object key)
        {
            ExpandoObject ex = null;
            return props.TryGetValue(key, out ex);
        } 
}  

私が達成したいのはこれです:
私はランダムな変数を持っています、例えば " photo_01, photo_12, photo_15, name_01, name_02, age_01, age_02"
可能であれば、この方法でメソッドを使いたいです:

id = <fetch from dbase>
instance.AddDataExtension("photo_" + id, byte[]);  

次に、値を取得します。

instance.GetDataExtension("photo_" + id)  
4

3 に答える 3

1

ExpandoObject から継承しているとは思わないので、おそらくそれを行う必要があります。ExpandoObject には、動的な型を作成するために使用できる優れたインフラストラクチャがあります。

動的型の作成について詳しく説明している記事は次のとおりです: http://www.codeproject.com/Articles/62839/Adventures-with-C-4-0-dynamic-ExpandoObject-Elasti

于 2012-06-29T06:46:22.463 に答える
0

ExpandoObject が封印されているため不可能です。

于 2012-10-02T10:07:58.437 に答える