C#泛型返回值



我正在做一个配置提供程序,在我的服务层中我有这样的:

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,这将是对泛型的滥用。。。我可以接受。

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

只要您确信转换不会失败,就可以使用:

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

如果您希望安全,您应该进行一些额外的检查,以确保该值可以实际转换为所需的类型。

最新更新