3

データストリームで次の問題が発生しました。

データストリームはディクショナリで構成されており、値のタイプを動的に解析して指定します。

つまり、私のデータストリーには次のものが含まれます。

  • 「日付」、「2000年1月1日」
  • 「名前」、「ジョー」
  • 「生きている」、「本当」
  • 「健康」、「100」

次に、このデータストリームに従ってジェネリッククラスのプロパティを設定します。

class GenericClass
{
    Hashtable genericAttributes;
}

リフレクションを介してデータストリームの値を正しいタイプに設定する可能性はありますか?

私は次のようなことを試すことができます:

DateTime.TryParse(date, out myDate);

日時オブジェクトの場合ですが、double、float、int16s、int32s、uint16、...を解析しようとすると、これは機能しないと思います。

それについてのいくつかの考え?

Thxとよろしく

4

1 に答える 1

2

あなたの質問からの私の推測は、それらはすべてであるということですIConvertible、それで私は以下の私のコード例で何かをします。アイデアは、「欲しい」順序を指定することです。つまり、複数のタイプに適合できる場合は、タイプが必要な順序で指定し、その順序で変換しようとします。

    public class GenericPropClass
    {
        public Type type;
        public object value;
        public string key;
    }

    [TestMethod]
    public void PropertySet()
    {
        var dict = new Dictionary<string, string>();
        var resultingList = new List<GenericPropClass>();
        // Specify the order with most "specific"/"wanted" type first and string last
        var order = new Type[] { typeof(DateTime), typeof(int), typeof(double), typeof(string) }; 

        foreach (var key in dict.Keys)
            foreach (var t in order)
            {
                try
                {
                    var res = new GenericPropClass()
                    {
                        value = Convert.ChangeType(dict[key], t),
                        key = key,
                        type = t,
                    };
                    resultingList.Add(res);
                    break;
                }
                catch (Exception)
                {
                    // Just continue
                }
            }

    }

ほとんどコードだけを含む短い答えで申し訳ありませんが、私は今夜それを改善して私の考えを取り入れるための時間があるかもしれませんが、私は今行かなければなりません:)

于 2012-11-02T15:18:09.133 に答える