C#泛型返回值

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://dev59.com/T2DVa4cB1Zd3GeqPgsuL#9420236所指出的那样,这将是对泛型的滥用...我可以接受。

由于我知道类型,我可以在方法外强制类型转换值,并在方法内将其视为字符串,但我想避免这种情况。


1
价值(Value)是什么类型?如果价值(Value)属性是T的基础类型,您可以只为T设置where约束,然后简单地进行转换而不需要对象部分。 - Centro
由于这些值主要是字符串、整型、布尔型和日期时间型,我认为可以使用“where T :IConvertible”进行限制。 - Esteban
1个回答

7
只要您确信该转换不会失败,就可以使用以下方法:

代码示例:

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

如果你想保险起见,应该进行一些额外的检查以确保该值实际上可以转换为所需的类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接