4

私は次のようなコードを持っています:

PropertyInfo p_info_keys = obj.GetType().GetProperty("Keys");
IEnumerable<string> keys = (IEnumerable<string>)p_info_keys.GetValue(obj, null);

foreach (string key in keys)
{
    // Some code
}

問題はこの行です:

IEnumerable<string> keys = (IEnumerable<string>)p_info_keys.GetValue(obj, null);

それができるので:

IEnumerable<decimal> keys = (IEnumerable<decimal>)p_info_keys.GetValue(obj, null);

私はこれを使おうとしました:

IEnumerable<object> keys = (IEnumerable<object>)p_info_keys.GetValue(obj, null);

しかし、もちろん、それは機能しません。

では、文字列と10進数の両方を受け入れることができるより一般的な構造をどのように使用できますか?

前もって感謝します。

4

1 に答える 1

6

最も簡単なアプローチは、以下をIEnumerable<T>拡張するという事実を使用することIEnumerableです。

IEnumerable keys = (IEnumerable) p_info_keys.GetValue(obj, null);

foreach (object key in keys)
{
    ...
}

もちろん、コンパイル時にキーのタイプはわかりませんが、両方の場合に同じ非ジェネリックコードを使用しようとしている場合は、とにかくそれは不可能です。

もう1つの方法は、一般的な方法でこれを行うことです。

public void Foo<T>(...)
{
    IEnumerable<T> keys = (IEnumerable<T>) p_info_keys.GetValue(obj, null);

    foreach (T key in keys)
    {
        ...
    }
}
于 2012-08-16T06:03:26.287 に答える