选择基于调用结构的返回类型
本文关键字:结构 返回类型 调用 于调用 选择 | 更新日期: 2023-09-27 18:00:54
我相信这对经验丰富的程序员来说是一个简单的问题,但我以前从未这样做过——假设我有一个自定义对象,如下所示:
public class MyClass
{
public Dictionary<string,string> ToDictString()
{
Dictionary<string,string> retval = new Dictionary<string,string>;
// Whatever code
return retval;
}
public Dictionary<string,int> ToDictInt()
{
Dictionary<string,int> retval = new Dictionary<string,int>;
// Whatever code
return retval;
}
}
因此,在我的代码中,我可以编写如下内容:
MyClass FakeClass = new MyClass();
Dictionary<string,int> MyDict1 = FakeClass.ToDictInt();
Dictionary<string,string> MyDict2 = FakeClass.ToDictString();
这很好,但我希望能够在MyClass
中调用一个方法,比如ToDict()
,它可以根据预期的返回类型返回任意一种类型的字典
例如,我会有:
MyClass FakeClass = new MyClass();
// This would be the same as calling ToDictInt due to the return type:
Dictionary<string,int> MyDict1 = FakeClass.ToDict();
// This would be the same as calling ToDictString due to the return type:
Dictionary<string,string> MyDict2 = FakeClass.ToDict();
因此,一个方法名,但它知道根据要返回的变量返回什么。。。我该如何在课堂上编写方法来做到这一点?
非常感谢!!
这是不可能的。重载解析算法没有考虑方法调用表达式的上下文,因此在您提到的示例中会导致歧义错误。
您需要有两个不同的方法名称(或参数列表中的不同(,方法才能有不同的返回类型。
您可以使用泛型来实现接近您想要的
public Dictionary<string,T> ToDict<T>()
{
Dictionary<string,T> retval = new Dictionary<string,T>();
// Whatever code
return retval;
}
使用时,您需要指定类型参数
var result = myClass.ToDict<int>();
这将返回类型限定符从方法名称移动到类型参数,并且是由于@Servy提到的问题而可以获得的最接近的限定符。