我不知道:
如果可行。
如果是个好主意。
所谓的顺序
了解更多信息。
但是我认为其意图是显而易见的。
public static class DebugLogic
{
public static bool ThrowIfNull = false;
public static T OrNew<T>(this T obj) where T : class
{
if (obj != null) return obj;
else if (ThrowIfNull) throw new ArgumentNullException(//to do...);
else return Activator.CreateInstance<T>();
}
}
预期用途:
var customer = order.Sale.OrNew().Customer.OrNew().Name
我在做什么?这是疯了还是有用的?似乎很有帮助。
最佳答案
我认为使用OrNew
方法的想法很好。特别是如果您正在努力制作一个流畅的界面。但是我会改变三件事
没有用于控制行为的隐藏标志(ThrowIfNull
)。这使得某人无法阅读OrNew
呼叫以了解其作用。
使用new
约束以支持不太安全的Activator.CreateInstance<T>()
调用
我称其为DebugLogic
以外的名称。通常(但并非总是)扩展方法容器以Extensions
结尾。
例如
public static class LogicExtensions {
public static T OrNew<T>(this T obj) where T : class, new() {
if (obj != null) {
return obj;
}
return new T();
}
}