在将流作为输入的函数中使用 Guard.Against

Use of Guard.Against in a function that take a stream as input

您编写了一个将流作为输入的方法:

    public static class ClassA {
    public static void FunctionA(Stream stream) {
        Guard.Against(stream == null, "stream is null");
        1. Guard.Against(stream.position != 0, "stream position is not 0");
        2. stream.position = 0
        3. //nothing
        //do stuff
    }
}

你应该

  1. 防止位置不为0
  2. 自己设置流位置为0
  3. 什么都不做

什么是最佳做法?我倾向于自己设置,但我想听听该决定可能引起的任何问题。

当且仅当使用不在位置 0 的流调用 FunctionA 确定的 编程错误时,使用选项 1。

但是,您应该考虑您的方法是否应该关心传递的流的位置,以及如果关心的话它对客户端施加的约束。客户端拥有该流。他们可以在调用您的方法之前读取或写入流,并且它限制客户端在调用 FunctionA 之前强制要求流必须位于位置 0。由客户端确保将流以正确的位置传递给您的方法,鉴于此,我推荐选项 3。

我会完全避免选项 2,除非它有很好的记录 - 默默地将位置重置为 0 可能会给使用你的方法的人造成混淆。