【发布时间】:2017-04-19 20:21:49
【问题描述】:
重新考虑我的问题后发表评论。 虽然@Dogu Arslan 提出了我使用WriteData 方法的确切示例的最佳解决方案,但问题标题的问题实际上是由@InBetween 和@Fabio 解决的。 IE。对于我使用 WriteData 方法的确切示例,最好将转换逻辑移出 WriteData 方法,但要从不相关的类型中抽象出逻辑,最好使用建议的重载。所以这三个答案对我都有帮助。
我已经阅读了以下类似问题 - 1、2 和其他问题 - 但在我的情况下没有找到合适的解决方案。
我的情况是:我有以下简单的方法。重要的部分是注释行和“来源”参数。其余部分并不那么重要,仅用于表明问题标题中存在“操作”。
void WriteData(
int count,
int currentIndex,
List<byte> source,
StreamWriter sw,
string fileName)
{
var countToWrite = count - currentIndex;
if (countToWrite == 0)
return;
if (sw == null)
sw = new StreamWriter(GetFullPath(fileName));
//---------- Source's elements must be converted to string.
var dataToWrite =
source.GetRange(currentIndex, countToWrite)
.Select(x => Convert.ToString(x));
StringBuilder sb = new StringBuilder();
foreach (var item in dataToWrite)
sb.AppendLine(item);
sw.Write(sb.ToString());
}
现在我希望“源”参数是包含字节、双精度或字符串的列表。我是否编写了三个 WriteData 方法的副本,只进行了一次更改 - “源”中的列表类型?还是有更好的方法?
我尝试了类型约束,但要约束什么类型?
我尝试检查类型,如果它不在我的类型列表(字节、双精度、字符串)中,则抛出异常。但是异常只在运行时起作用,我希望它在编译时起作用。
现在我不得不将运行时类型检查作为临时解决方案来限制自己,但是,正如我之前提到的,它不适合透视。
【问题讨论】:
-
你能不能让它通用,并检查它是否以编程方式给出类型/
标签: c# type-constraints