如何从 C# 中的同一方法返回字符串以及 IEnumerable<T>? [复制]

Posted

技术标签:

【中文标题】如何从 C# 中的同一方法返回字符串以及 IEnumerable<T>? [复制]【英文标题】:How do I return string as well as IEnumerable<T> from same method in C#? [duplicate] 【发布时间】:2015-09-29 02:10:24 【问题描述】:

我有一种通用方法可以执行一些操作并且想要 返回结果为字符串或IEnumerable&lt;T&gt;

  public IEnumerable<T> MyResult(string input)
  
      // do something return string based on some
      // case or return IEnumerable<T>
  

如何在一种方法中实现这一点,以及如何维护返回类型?

【问题讨论】:

您可能已经发现,一个方法可以有一个返回类型。添加一个 out 参数或创建一个包含可枚举和字符串的 DTO 并返回它。 您必须添加一些上下文。你不能按照你的建议去做,但我看不出你的建议特别有用。你想解决什么问题? 【参考方案1】:

首先:一个方法不能有多种返回类型。

即使这是一个糟糕的设计,您也可以 (A) 添加一个输出参数或 (B) 创建一个包含可枚举和字符串的 DTO 并返回它。

(A):

public IEnumerable<T> MyResult(string input, out string output)

    // do something 

(B):

public MyDTO MyResult(string input)

    // do something 

public class MyDTO 

    public IEnumerable<T> resultAsEnumerable get; set;

    public string resultAsString get; set;    

【讨论】:

@cubrr DTO 是一个 data ttransfer object。 [链接]martinfowler.com/eaaCatalog/dataTransferObject.html【参考方案2】:

您可以使用object 作为函数的返回类型,然后您可以根据输入返回stringIEnumerable&lt;T&gt;。像这样的:

public object MyResult<T>(string input)

    if (true)
        return "string";
    else
        return return new List<T>()  default(T) ;

【讨论】:

这是一个糟糕的设计..请不要这样做。 also:这将始终返回“字符串”,因为 true 始终为 true。不要这样做! @ChrisM 当然他会在那里插入自己的条件......

以上是关于如何从 C# 中的同一方法返回字符串以及 IEnumerable<T>? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

C#中的Split用法以及详解

如何从 C# 中的表单返回值?

如何从C#中的字符串中提取href标签?

如何使用 DLLImport 将字符串从 C# 传递到 C++(以及从 C++ 到 C#)?

如何从 C# 中的方法返回等效的 VB6 Variant 类型

C# 方法签名以及怎样的两个方法才算是不同的方法