Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为具有不同返回类型的方法提出正确的设计_C#_.net - Fatal编程技术网

C# 为具有不同返回类型的方法提出正确的设计

C# 为具有不同返回类型的方法提出正确的设计,c#,.net,C#,.net,在某些情况下,我希望我的方法返回XDocument对象,在其他情况下,我希望方法返回XmlDocument 我看到的解决方案: 使用返回类型对象 创建两种不同的方法(不同名称);一个返回XDocument,另一个返回XmlDocument 使用不同的out参数类型创建方法重载 你能提出好的设计方案吗?你用的是什么语言?vb.net if <condition 1> then Return XDocument else if <condition 2> then Ret

在某些情况下,我希望我的方法返回
XDocument
对象,在其他情况下,我希望方法返回
XmlDocument

我看到的解决方案:

  • 使用返回类型
    对象

  • 创建两种不同的方法(不同名称);一个返回
    XDocument
    ,另一个返回
    XmlDocument

  • 使用不同的
    out
    参数类型创建方法重载


  • 你能提出好的设计方案吗?

    你用的是什么语言?vb.net

    if <condition 1> then
     Return XDocument
    else if <condition 2> then
     Return XmlDocument
    End if
    
    if-then
    返回XDocument
    否则
    返回XML文档
    如果结束
    
    我想说的是创建一个尽可能多地共享私有/受保护代码的方法。然后,当您必须专门化返回给调用方的内容时,请创建两个强类型的公共方法。

    您可以使用泛型方法:

    public T GetDocument<T>();
    

    我认为,您也可以通过以下方式获得重载返回类型

                    public interface IXDocument
                    {
                        XDocument GetDocument(string str);
                    }
                    public interface IXMLDocument
                    {
                        XMLDocument GetDocument(string str);
                    }
    
    
    
                public class Document : IXDocument, IXMLDocument
                {
                    public XDocument IXDocument.GetDocument(string str)
                    {
                        // return XDocument
                    }
                    public XMLDocument IXMLDocument.GetDocument(string str)
                    {
                        // return XMLDocument
                    }
    
                }
    
    
                XDocument returnedXDocument = ((IXDocument)Instance of Docuement).GetDocument("value");
                // - and/or
                XMLDocument returnedXMLDocument = ((IXMLDocument)Instance of Docuement).GetDocument("value");
    

    第二个解决方案比其他解决方案好得多(第一个方案尤其是一个令人难以置信的坏主意)。但我能提出的最好建议是a)告诉我们你想要实现什么,而不是你认为应该如何实现;b)更好地熟悉抽象的概念。
                    public interface IXDocument
                    {
                        XDocument GetDocument(string str);
                    }
                    public interface IXMLDocument
                    {
                        XMLDocument GetDocument(string str);
                    }
    
    
    
                public class Document : IXDocument, IXMLDocument
                {
                    public XDocument IXDocument.GetDocument(string str)
                    {
                        // return XDocument
                    }
                    public XMLDocument IXMLDocument.GetDocument(string str)
                    {
                        // return XMLDocument
                    }
    
                }
    
    
                XDocument returnedXDocument = ((IXDocument)Instance of Docuement).GetDocument("value");
                // - and/or
                XMLDocument returnedXMLDocument = ((IXMLDocument)Instance of Docuement).GetDocument("value");