返回不同类型的函数?

时间:2017-05-11 22:58:44

标签: c#

假设我有一个包含两个属性的容器类:

  • 字符串内容
  • bool isCommaSeperated

一个功能:

? compute()
{
    if(this.isCommaSeperated)
    {
        return contents.split(",").toList();
    }
    else
    {
        return contents;
    }
}

这个函数有没有办法返回字符串或字符串列表? 或者什么类型的设计可以让我实现类似的东西?

2 个答案:

答案 0 :(得分:1)

您可以使用dynamic来实现:

dynamic Compute(bool isCommaSeperated)
{
    if(isCommaSeperated)
    {
        return contents.Split(",").ToList();
    }
    else
    {
        return contents;
    }
}

代码仍将保留类型信息,但如果您尝试使用其他类型的方法,则允许您返回任何您喜欢的类型并在运行时失败。

请注意,通过执行此操作可以放弃编译类型安全性。根据您的需要,它可能没问题,但考虑一些替代解决方案,保持编译类型安全性将更好地工作。即返回单个元素数组,如istme86' s asnwer所示。

答案 1 :(得分:0)

虽然IEnumerable<string>是标准解决方案,但您也可以尝试在字符串值和字符串数组之间隐式转换的新StringValues结构:

StringValues a = "A";
StringValues b = new string[] { "A", "B" };
StringValues c = null;

Console.WriteLine(a.Contains("A"));
// true

Console.WriteLine(b.Any(x => x == a));
// true

Console.WriteLine(c.Any());
// false