C#重载方法泛型参数的一点小问题
现在有一个HttpHelper类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | public async Task< string > ExecuteAsync<H>(H header) where H : class , new () { var client = new RestClient(_url); if (! string .IsNullOrWhiteSpace(_accountSid) && ! string .IsNullOrWhiteSpace(_secretKey)) { client.Authenticator = new HttpBasicAuthenticator(_accountSid, _secretKey); } var headerString = JsonConvert.SerializeObject(header); Dictionary< string , string > headerParameters = JsonConvert.DeserializeObject<Dictionary< string , string >>(headerString); RestRequest request = new RestRequest(); if (headerParameters != null ) { foreach ( var p in headerParameters) { request.AddHeader(p.Key, p.Value); } } var response = await client.ExecuteAsync(request, Method.GET); return response.Content; } public async Task< string > ExecuteAsync<T>(T data, bool isFrom = true ) where T : class , new () { if (data == null ) return "" ; var client = new RestClient(_url); var dataString = JsonConvert.SerializeObject(data); RestRequest request = new RestRequest(); if (isFrom) { Dictionary< string , string > parameters = JsonConvert.DeserializeObject<Dictionary< string , string >>(dataString); foreach ( var p in parameters) { request.AddParameter(p.Key, p.Value); } } else { //request.AddHeader("Accept", "application/json"); request.AddJsonBody(dataString); } var response = await client.ExecuteAsync(request, Method.POST); return response.Content; } |
这种写法是完全符合规则,但是调用的时候会有点小问题。
第二个方法调用,我们一般会忽略第二个入参,按照定义第二个入参我们设置了默认值,目的就是让在调用的时候省点代码。
如
1 | ExecuteAsync(request) |
但是现在因为有另一个重载泛型方法出现,导致调用了第一个方法,是不是有点意外?
所以是不是含泛型参数的方法,不建议使用有默认值的入参?靠北了这是。
那就不重载了重新命个名ExecuteAsyncGet
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)