C#通用返回值

时间:2012-09-10 21:45:54

标签: c# generics

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

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,这将是滥用泛型 ......我可以忍受这种情况。

因为我知道类型我可以将值转换为方法之外的值,并将该方法作为字符串处理,但我想避免这种情况。

1 个答案:

答案 0 :(得分:7)

只要您确定演员表不会失败,您可以使用:

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

如果您想要安全,您应该做一些额外的检查,以确保该值实际上可以转换为所需的类型。