3

私は構成プロバイダーを行っており、私のサービス層にはこれがあります:

public string GetValue(string key)
{
    return _ctx.Configurations.SingleOrDefault(q => q.Key == key).Value;
}

しかし、元の型の値を取得するにはどうすればよいですか。次のようにしたいと思います。

public T GetValue<T>(string key)
{
    return (T)(object)_ctx.Configurations.Single(q => q.Key == key).Value;
}

ここで指摘されているように: https://stackoverflow.com/a/9420236/544283、それはジェネリックの乱用になります...私はそれで暮らすことができます。

タイプがわかっているので、メソッドの外側で値をキャストし、メソッドの内側で文字列として扱うことができますが、それは避けたいと思います。

4

1 に答える 1

7

キャストが失敗しないことが確実である限り、次を使用できます。

var value = _ctx.Configurations.Single(q => q.Key == key).Value;
return (T)Convert.ChangeType(value, typeof(T));

安全を確保したい場合は、追加のチェックを行って、値が実際に目的の型にキャストできることを確認する必要があります。

于 2012-09-10T21:48:14.000 に答える