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 回答