我知道两种异常处理方法,让我们来看看它们.
合同方式.
如果方法没有按照它在方法头中所做的那样做,它将抛出异常.因此,该方法"承诺"它将执行操作,如果由于某种原因失败,它将抛出异常.
特殊的方法.
只有在发生真正奇怪的事情时抛出异常.当您可以使用正常控制流(If语句)解决情况时,不应使用异常.您不会像在合同方法中那样使用Exceptions作为控制流.
让我们在不同的情况下使用这两种方法:
我们有一个Customer类,它有一个名为OrderProduct的方法.
合同方式:
class Customer
{
public void OrderProduct(Product product)
{
if((m_credit - product.Price) < 0)
throw new NoCreditException("Not enough credit!");
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
特殊方法:
class Customer
{
public bool OrderProduct(Product product)
{
if((m_credit - product.Price) < 0)
return false;
// do stuff
return true;
}
}
if !(customer.OrderProduct(product))
Console.WriteLine("Not enough credit!");
else
// go on with your life
Run Code Online (Sandbox Code Playgroud)
在这里,我更喜欢这种特殊的方法,因为假设他没有赢得彩票,客户没有钱也不是真正的例外.
但这是一种我在合同风格上犯错的情况.
卓越:
class CarController
{
// returns null if car creation failed.
public …Run Code Online (Sandbox Code Playgroud) 我正在构建一个基于MVVM-Light的应用程序.我需要创建同一个View的多个实例,每个实例都应绑定到自己的ViewModel.
默认情况下将ViewModelLocatorViewModels实现为单例,因此同一View的不同实例将绑定到同一ViewModel.
我可以在VMLocator中创建ViewModel作为非静态对象(就像返回新VM()...一样简单),但这只会对我有所帮助.事实上,我仍然需要跟踪打开的窗口.然而,每个窗口可能会打开其他几个窗口(不同类型).在这种情况下,我可能需要在父View及其所有子项上执行一些操作.例如,在关闭View P之前,我可能想要关闭它的所有子节点(视图C1,视图C2等).
因此,有没有简单易行的方法来实现这一目标?或者你有什么建议我遵循的最佳做法?
提前感谢您的宝贵帮助.
干杯,
Gianluca.
我正在按照MVVM模式制作WPF应用程序.在这我使用实体框架,
我的实体结构很简单,它有3个实体:部门,课程,书籍,
一个部门可以有很多课程,一门课程可以有很多书,
现在我想在树视图中显示这个,所以我在wpf中的输出应该是这样的,
Department1
Course1
Book1
Book2
Course2
Book3
Department2
Course
Book
Department3
Run Code Online (Sandbox Code Playgroud)
在我的ViewModel中我有EntityContext对象.但我不知道如何在树视图中显示这一点.我怎么能做到这一点.
我需要将XML文件读入字典.
我阅读了一些指南,我只是对我不理解的奇怪单词(如节点,XML验证等)感到困惑.那么,请你帮我一下走吧?
我有一个XML文件,以这种格式编写:
<database>
<def number="1" name="one"/>
<def number="2" name="two"/>
</database>
Run Code Online (Sandbox Code Playgroud)
如上所述,我想将它存储在字典中.我该怎么办呢?
在C++中我有这个:http://msdn.microsoft.com/en-us/library/b0084kay(v = vs.80).aspx.
所以我可以编写只在我调试时运行的代码,或者只针对特定平台(PowerPC,MIPS,Power Macintosh等),它不再受支持,但它是一个非常好的例子.您也可以在32位和64位系统之间进行切换(当然,这仅在您发布2个不同版本时才有用,每个版本都有自己的处理器架构.在C#中,这是一种罕见的需求,但它仍然存在).
所以我的问题是如果C#中存在类似的东西.我意识到没有宏,但是有一些符号(即使是相同的#define关键字.所以它至少对我来说是有意义的 - 它应该存在.
我有一个项目,这是一个沙盒里面,我在小集团文件中引入一个测试套件,它build-depends上hunit ==1.2.*.问题是当我尝试配置时:
$ cabal configure --enable-tests
解决依赖关系......
配置MyProject-0.1.0.0 ...
cabal:至少缺少以下依赖项:
hunit == 1.2.*
还有一些尝试让它出现:
$ cabal install --dependencies-only
解析依赖项...
已安装所有请求的软件包:
如果要重新安装,请使用--reinstall.
&
$ cabal install hunit
解析依赖项...
已经安装了所有请求的软件包:
HUnit-1.2.5.2
如果要重新安装,请使用--reinstall.
&
$ cabal install --enable-tests
解决依赖关系...
cabal:无法解析依赖关系:
尝试:MyProject-0.1.0.0(用户目标)
拒绝:MyProject-0.1.0.0:!test(全局约束需要相反的标记选择)
尝试:MyProject-0.1.0.0:*测试
下一个目标:hunit(MyProject-0.1.0.0:*test的依赖)
失败(未知包:hunit)
完全搜索依赖树.
--reinstall什么也没做.
我甚至玩过--user和--global旗帜,即使我正在使用cabal而不是runhaskell,它也无济于事.
我也尝试过delete重新init安装沙盒.
我也试过delete沙箱,它仍然给了我同样的错误.
ghc-pkg check发现没有错.
会是什么呢?
顺便说一下,我的一部分人怀疑cabal忽略了我的项目是在沙盒中,因为它没有费心去安装已经在我的机器上的一些软件包; 它在我的Windows上运行(这是在Ubuntu上).可以检查吗?
Ubuntu 14.04.1 LTS
GHC版本:7.6.3
cabal-install版本:1.20.0.3
Cabal库版本:1.20.0.2
现在尝试使用cabal-install 1.16.0.2但没有成功.
我的情况非常简单:我有一个C++应用程序和一个Haskell库,我只需要从Haskell导出一个返回C字符串的函数.
问题是C字符串最初是一个String,并且要从中获取C字符串,我需要分配存储,这必须被显式解除分配(Haskell free或者finalizerFree,作为文档newCString说明).
处理这个问题的好方法是什么?具体来说,我有一些注意事项:
理想情况下,我想以某种方式让Haskell运行时GC处理这个问题,但我不确定它是什么时候可以知道外来方还需要内存的时间和时间.可能吗?
如果没有,我可以只调用C free或者是CStringHaskell运行时维护的存储吗?如果不是,我想我将不得不出口Haskell free并从外方调用它,对吗?
我使用下面的这一行来创建我的Bitmap:
Bitmap b = new Bitmap(@"C:\<file name>");
Run Code Online (Sandbox Code Playgroud)
修改此位图后,我想将其保存在下面的行中:
b.Save(@"C:\\<other file name>")
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 如何从属性中获取文件名位图.
简单地说,我需要保存位图,并使用与我发起它的名称相同的位图.
谢谢
如何在Cabal-install中发生依赖?
我在Cabal/Survival上阅读了以下内容- HaskellWiki:
1. Cabal-install造成的困难是什么?
Cabal的主要困难还被称为"依赖性地狱",其中cabal-install无法出于某种原因安装所需的包,从而导致大量的手动工作.作为这种困难的一个例子,考虑用户希望安装包A和B的情况.这两种方法都适用于包C,但不适用于相同版本的C.
我理解为什么这一般有意义,但不适用于Cabal-install/ghc-pkg,因为您可以安装相同软件包的多个版本.
就好像每个版本都是一个完全不同的软件包一样,在很多方面,版本如何成为软件包名称的一部分(例如mustaches-0.1.0.0) - 也许它真的是ghc-pkg(我对它不是很熟悉,但它会有意义).