如何命名Get()方法的变体?

时间:2011-11-09 20:21:10

标签: c# naming-conventions

我正在为类似存储库的抽象开发API。我有两种方法:

// Throws an exception if object cannot be found
MyObj Get(MyIdType id);

// Returns false if object cannot be found; no exception
bool TryGet(out MyObj obj);

需要第三个变体:如果无法找到对象,则返回null,并且不会抛出异常。

// Returns null if object cannot be found; no exception
MyObj ?????(MyIdType id);

我被困在什么名字上。 GetOrDefault 已被排除为混乱。已提出 GetIfNotNull ,但似乎也不清楚。到目前为止, GetOrNull 是最有希望的。

有没有人有任何其他建议,或者知道我可以遵循哪些公约API?

6 个答案:

答案 0 :(得分:3)

我会选择在两种情况下没有表现不同的Get方法。为什么不让所有情况下的Get返回null。为什么要抛出异常呢?

如果需要,如果返回null值,我会选择将其留给用户代码抛出异常。

有关何时抛出异常的进一步指导,请参阅this question

答案 1 :(得分:2)

我会根据LINQ扩展方法GetOrDefault使用FirstOrDefault(正如您自己建议的那样)。

虽然GetValueGetValueOrDefault听起来会更好。

答案 2 :(得分:1)

如何:GetOrDefault

...OrDefault在LINQ中是相当标准的。

答案 3 :(得分:0)

在我看来,你应该坚持:

MyObj Get(MyIdType id);

不要在此处抛出异常,只需返回null即可。 如果明确要求抛出异常,可选择null,我会尝试:

MyObj Get (MyIdType id, bool ReturnDefault = false) // if .net 4

我并不特别喜欢这个选项 - 但有时候要求会超越我们认为正确或自然的感觉。

答案 4 :(得分:0)

您可以尝试GetObjectOrReturnDefaultValue或者,因为您知道它是引用类型GetObjectOrReturnNull。这很长很难看,但并不含糊。

答案 5 :(得分:0)

我只会在bool TryGetXXXXX(out T value)上保留interface个变体,并将其余部分作为扩展方法提供给它。它使您的界面本身非常紧凑,但同时也像客户想要的那样有用。