首页 新闻 会员 周边

C# 中如何让泛型参数支持 TryParse 字符串

0
悬赏园豆:30 [已解决问题] 解决于 2026-02-08 20:23

场景是下面的 HttpClient 扩展方法实现,想从 response headers 中读取字符串值,通过 TryParse 转换为泛型类型对应的值

public static class HttpClientExtensions
{
    extension(HttpClient httpClient)
    {
        public async Task<TResult?> ReadFromHeadAsync<TResult>(string requestUri, string readHeaderName)
        {
            var response = await httpClient.HeadAsync(requestUri);
            if (response.Headers.TryGetValues(readHeaderName, out var values))
            {
                if (TResult.TryParse(values.LastOrDefault(), null, out TResult? returnValue))
                {
                    return returnValue;
                }
            }
            return default;
        }
    }
}
dudu的主页 dudu | 高人七级 | 园豆:23394
提问于:2026-02-08 19:43
< >
分享
最佳答案
0

给泛型加个 IParsable<TResult> 接口约束即可

public static partial class HttpClientExtensions
{
    extension(HttpClient httpClient)
    {
        public async Task<TResult?> ReadFromHeadAsync<TResult>(string requestUri, string readHeaderName, ILogger? logger)
            where TResult : IParsable<TResult>
        {
            //...
        }
    }
}
dudu | 高人七级 |园豆:23394 | 2026-02-08 20:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册