假设我有一个包含两个属性的容器类:
一个功能:
? compute()
{
if(this.isCommaSeperated)
{
return contents.split(",").toList();
}
else
{
return contents;
}
}
这个函数有没有办法返回字符串或字符串列表? 或者什么类型的设计可以让我实现类似的东西?
答案 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