c# - c# - 当签名相同时调用特定方法
问题描述
我不确定如何称呼这种情况,但这里是:
我有 2 种不同类型的方法,但从“外部”来看,它们具有相同的签名。在调用该方法时,我想调用一个特定的方法而不是另一个 - 这就是我所拥有的:
public class SomeClass
{
public async Task<Response<T>> MyMethod<T>(string name, T myObj)
{
// some code here
}
public async Task<Response<T>> MyMethod<T>(string name, string myObj)
{
// some code here
}
}
对于编译器,上面的 2 种方法是不同的,并且具有不同的签名。但是打电话的时候:
var myClass = new SomeClass();
myClass.MyMethod("name", "something");
在示例中调用MyMethod
时,调用的是MyMethod<T>(string name, T myObj)
,但我真正想要调用的是第二种方法。有没有办法让它调用一个特定的签名?
编辑:
我发现如果我在其中一个方法中给第二个变量一个不同的名称,然后使用变量名称调用该方法作为调用的一部分,它确实有效,如下例所示:
public class SomeClass
{
public async Task<Response<T>> MyMethod<T>(string name, T myObj)
{
// some code here
}
public async Task<Response<T>> MyMethod<T>(string name, string myNewObj)
{
// some code here
}
}
var myClass = new SomeClass();
myClass.MyMethod<AnyOfMyTypes>("name", myNewObj: "something");
虽然这是可行的,但在下面乔恩的回应之后,这似乎是正确的做法吗?至于方法名,我想保持不变,另一种选择是通过添加一些虚拟boolean
变量来更改签名。
解决方案
编译器当然不能用该调用代码调用第二种方法,因为它不知道要推断什么T
。但是,如果您指定类型参数,它确实会调用第二种方法:
myClass.MyMethod<string>("name", "something");
虽然这会起作用,但我强烈建议您尽可能更改设计。重命名其中一种方法。我可以合理地称自己为 C# 专家,但我无法通过检查来预测这是否可行。C# 中的重载解析和类型推断细节非常复杂,期望每个 C# 开发人员都完全了解它们是不合理的。
如果您可以给方法起不同的名称,那么代码代码可能会更易于阅读。
推荐阅读
- sql - How to Join Conditionally to Different Tables
- python - Async(io) Process Proxy
- javascript - parsing a variable from a scala twirl template to javascrpt in a seperate file
- bash - Open Server 5.0.7 - What does the cleanup shell script?
- debian - Sudo not asking for password with default sudoers config
- flutter - Flutter android_alarm_manager插件无法将参数传递给回调函数
- swift - Is the amount of data sent from firebase limited only to the branch asked for?
- python - How to test the download endpoint of a flask server
- akka.net - "max allowed size 128000 bytes" reached when there are a lot of publisher/subscribers
- python - Calculate difference of two columns from two different dataframes based on condition