我确信对于有经验的程序员来说这是一个简单的问题,但我以前从未这样做过 - 假设我有一个自定义对象,如下所示:
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();
所以,一个方法名称,但它根据要返回的变量知道要返回什么...如何在我的类中编写方法来执行此操作?
非常感谢!!
答案 0 :(得分:6)
这是不可能的。重载决策算法不考虑方法调用表达式的上下文,因此在您提到的示例中会导致歧义错误。
要使方法具有不同的返回类型,您需要有两个不同的方法名称(或参数列表中的差异)。
答案 1 :(得分:2)
您可以使用泛型来实现接近您想要的东西
public Dictionary<string,T> ToDict<T>()
{
Dictionary<string,T> retval = new Dictionary<string,T>();
// Whatever code
return retval;
}
使用时需要指定类型参数
var result = myClass.ToDict<int>();
这会将返回类型限定符从方法名称移动到类型参数,并且由于@Servy提到的问题,它是您可以获得的最接近的。