场景是下面的 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;
}
}
}
给泛型加个 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>
{
//...
}
}
}