选择基于调用结构的返回类型

本文关键字:结构 返回类型 调用 于调用 选择 | 更新日期: 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提到的问题而可以获得的最接近的限定符。