备注重新考虑我的问题后。 尽管我的WriteData方法的确切示例的最佳解决方案是由@Dogu Arslan提出的,但问题标题问题实际上是由@InBetween和@Fabio解决的。 I. e。对于使用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方法的三个副本只有一个更改 - “源”中的列表类型?或者有更好的方法?
我试过类型约束,但是要约束什么类型?
我试着检查类型并抛出异常,如果它不在我的类型列表中(字节,双精度,字符串)。但是异常只在运行时才起作用,我希望它能在编译时工作。
现在我必须限制自己的运行时类型检查作为临时解决方案,但是,正如我之前提到的,它不适合从视角来看。
你可以使它通用,并检查它是否以编程方式给出类型/ –