|:一个很多无事(或null)
我相信你写的代码应该表达的方式,几乎像一个story.nbsp读取您想要的功能,要做到这一点,你需要使用的编码风格,包括方法,属性和字段的描述性名称。 的一个领域,很多人不考虑自己的代码说,当他们使用在C#或没有在VB.nbsp空; 使用不当,它可能会导致代码混乱和微妙的错误。
因此,让我们的空使用代码开始英语翻译和研究一些代码成语。初始化变量为null
这是最简单的语句:ISpoon aSpoon = null;
这意味着:"我可能要使用勺子,在一些点,在这个类或方法,但我已决定哪一个,都没有得到,或没有做了一个??NBSP另一个说,这是"有没有勺子??
公告,该变量定义在接口ISpoon方面。这样做的原因是,有许多不同类型的勺子(银,咖啡,糖,服务,木,??,我想对于一个给定的情况下能够使用最合适的。分配到一个变量的空
故事下面的代码:{C}
在这种情况下你必须得到一个勺子和使用it.nbsp;转让说"我做这个勺子,并不在乎它anymore.nbsp的,我就砸的地方,并清理船员(在。NET垃圾收集器)会选择它,洗它,并把它放回去,别人可以用它吗??从一个方法返回NULL
方法通常会返回单个值或values.nbsp收集;对于返回单值的方法,则返回null,将意味着不同的东西取决于method.nbsp的目的,例如,ISpoon aSpoon = GetAWoodenSpoonFromTheDrawer();
将意味着我认为没有哪的drawer.nbsp木勺,现在你将有检查aSpoon是不是在使用它之前的空,并选择不同类型的勺子,或得到木勺elsewhere.nbsp我个人觉得这种类型的代码削弱代码的故事流,宁愿抛出exceptionnbsp;作为例外可以告诉你什么去wrong.nbsp;因此,而不是ISpoon aSpoon = GetAWoodenSpoonFromTheDrawer();
// couldn't get a spoon from the drawer
if (aSpoon == null)
aSpoon = FindAWoodenSpoonElsewhere();
// use the spoon if one was found.
if (aSpoon != null)
{
...
}
我会写ISpoon aSpoon = null;
try
{
ISpoon aSpoon = GetAWoodenSpoonFromTheDrawer();
}
// there isn't a spoon in the drawer
catch (NoSpoonFoundException)
{
// look elsewhere
try
{
aSpoon = FindAWoodenSpoonElsewhere();
}
// No spoon found anywhere
catch(NoSpoonFoundException)
{
aSpoon = BuyAWoodenSpoon();
}
}
// there was a spoon, but it was dirty
catch(DirtySpoonException)
{
WashDishes();
aSpoon = GetAWoodenSpoonFromTheDrawer();
}
// use the spoon if one was found.
if (aSpoon != null)
{
...
}
的情况下,该方法返回在项目的集合,ICollection<ISpoon> mySilverSpoons = GetAllSpoonsThatAre("silver");
返回一个空不说"有没有汤匙 ??相反,它说:"我无法创建勺集合 ??在这种情况下,我将返回一个集合与任何项目。 像以前一样,错误应该抛出例外。这意味着您可以安全地遍历集合returned.nbsp;使用模式会是什么样子:try
{
ICollection<ISpoon> mySilverSpoons = GetAllSpoonsThatAre("silver");
foreach(var spoon in mySilverSpoons)
{
Polish(spoon);
}
}
catch(MissingSilverwareBoxException)
{
CallPolice();
}
catch(NoPolishAvailable)
{
Order("Polish");
Reschedule("Polish Silver Task");
}
由于时间所限,我不会以解决在这个博客null参数。
我希望这给你的东西去思考架构/设计你applications.nbsp;只记得什么(或null)可以伤害你,如果你不想想没什么。