在某些情况下,我希望我的方法返回XDocument
个对象,而在其他情况下XmlDocument
。
我看到的解决方案:
使用返回类型object
创建两种不同的方法(差异名称);一个返回XDocument
,另一个返回XmlDocument
。
使用不同的out
参数类型创建方法重载。
你能提出好的设计吗?
答案 0 :(得分:2)
您可以使用通用方法:
public T GetDocument<T>();
在调用XDocument
时返回GetDocument<XDocument>
,在调用XmlDocument
时返回GetDocument<XmlDocument>
。
在你可以做的方法中
if (T is XmlDocument) ...
else if (T is XDocument) ...
else throw new ArgumentException("Invalid type for T");
答案 1 :(得分:0)
if <condition 1> then
Return XDocument
else if <condition 2> then
Return XmlDocument
End if
答案 2 :(得分:0)
我想创建一个方法,尽可能多地共享私有/受保护的代码。然后,当您必须专门化返回给调用者的内容时,创建两个强类型的公共方法。
答案 3 :(得分:0)
我认为,您也可以通过以下方式获得重载返回类型....
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");