在将流作为输入的函数中使用 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
}
}
你应该
- 防止位置不为0
- 自己设置流位置为0
- 什么都不做
什么是最佳做法?我倾向于自己设置,但我想听听该决定可能引起的任何问题。
当且仅当使用不在位置 0 的流调用 FunctionA
是 确定的 编程错误时,使用选项 1。
但是,您应该考虑您的方法是否应该关心传递的流的位置,以及如果关心的话它对客户端施加的约束。客户端拥有该流。他们可以在调用您的方法之前读取或写入流,并且它限制客户端在调用 FunctionA
之前强制要求流必须位于位置 0。由客户端确保将流以正确的位置传递给您的方法,鉴于此,我推荐选项 3。
我会完全避免选项 2,除非它有很好的记录 - 默默地将位置重置为 0 可能会给使用你的方法的人造成混淆。
您编写了一个将流作为输入的方法:
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
}
}
你应该
- 防止位置不为0
- 自己设置流位置为0
- 什么都不做
什么是最佳做法?我倾向于自己设置,但我想听听该决定可能引起的任何问题。
当且仅当使用不在位置 0 的流调用 FunctionA
是 确定的 编程错误时,使用选项 1。
但是,您应该考虑您的方法是否应该关心传递的流的位置,以及如果关心的话它对客户端施加的约束。客户端拥有该流。他们可以在调用您的方法之前读取或写入流,并且它限制客户端在调用 FunctionA
之前强制要求流必须位于位置 0。由客户端确保将流以正确的位置传递给您的方法,鉴于此,我推荐选项 3。
我会完全避免选项 2,除非它有很好的记录 - 默默地将位置重置为 0 可能会给使用你的方法的人造成混淆。