C# 没有构造对象时的方法链接
在我当前的Net Framework 4项目中,我做了以下工作: 将我的类构造函数定义为private 调用静态类方法以获取该类的对象 调用新构造的对象的方法,可能会失败 这将以以下方式显示:C# 没有构造对象时的方法链接,c#,fluent-interface,C#,Fluent Interface,在我当前的Net Framework 4项目中,我做了以下工作: 将我的类构造函数定义为private 调用静态类方法以获取该类的对象 调用新构造的对象的方法,可能会失败 这将以以下方式显示: MyClassName obj = MyClassName.GetObject("Name").DoJob().Close(); 在哪里 GetObject是一个静态方法,它返回MyClassName或NULL的实例。我特别希望在创建失败时返回NULL,因为我没有想到其他方法 DoJob和Close是实
MyClassName obj = MyClassName.GetObject("Name").DoJob().Close();
在哪里
GetObject是一个静态方法,它返回MyClassName或NULL的实例。我特别希望在创建失败时返回NULL,因为我没有想到其他方法
DoJob和Close是实例方法,它们返回该方法,并在GetObject失败或两者之间的任何操作失败时抛出System.NullReferenceException。
问题是:是否有可能以我想要的方式设计它,而不使用try-catch块?我想要很多很多单行代码,而不是try-lineOfCode-catch。每一条线都将是另一个执行其特定任务的物体,并且会自我毁灭/被遗忘。我也不需要使用MyClassName obj=part。您可以将null对象作为函数的一部分返回,而不是返回null值
在这种情况下,当调用DoJob和Close时,该对象将不执行任何操作,只返回自身
可能的问题可能是需要定义某种简单的类层次结构来实现此模式。当您现在只有一个类时,这可能看起来有些过分。zerkms建议的第二个选项是使用某种选项类型,而不是可为空的值 因此,使用for C。您的代码可能类似于:
// simplified skeleton
class MyClassName
{
private MyClassName() {}
public MyClassName GetObject(string name)
{
return new MyClassName();
}
public MyClassName DoJob() { return this; }
public MyClassName Close() { return this; }
}
Option<MyClassName> obj = MyClassName.GetObject("Name").ToOption().Select(x=>x.DoJob()).Select(x=>x.Close());
if (obj.HasValue)
{
// can work with obj.Value
}
else
{
// somewhere was null
}
是的,我同意有一些噪音,但这些是语言的限制。这就是C6的空条件运算符的位置?。一定要发光!嗯,我应该提到,我正在为这个项目与NETFramework4合作。。。。。。或者,如果你对命令式OO范式太厌倦了,他们可能会实现一个相反的PS:链接是随机的,但文章看起来是合法的PPS:这看起来也很有希望:@zerkms C中的Maybe's的问题是缺乏语言支持。像选项类型这样的东西只有在您有语言支持时才有意义,因为否则,您就有大量的样板代码。但对我来说,它看起来更容易接受:var result=MaybeGetAnInt.Match Just:v=>v*10,Nothing:0;它简洁易读,在实践了一些之后,我刚刚创建了NullClassName,它是从MyClassName和虚拟化键方法派生的。当创建失败时,我会创建并返回NullObject,然后它什么也不做。问题是我需要为剩余的MyClassName1、MyClassName2等定义NullClassName1、NullClassName2、NullClassName3。。。好吧,没关系,只要我不必担心异常。感谢您为我指明了正确的方向: