小编Mas*_*tic的帖子

异常处理:合同与特殊方法

我知道两种异常处理方法,让我们来看看它们.

  1. 合同方式.

    如果方法没有按照它在方法头中所做的那样做,它将抛出异常.因此,该方法"承诺"它将执行操作,如果由于某种原因失败,它将抛出异常.

  2. 特殊的方法.

    只有在发生真正奇怪的事情时抛出异常.当您可以使用正常控制流(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)

exception

12
推荐指数
1
解决办法
846
查看次数

如何拥有多对"View-ViewModel"?

我正在构建一个基于MVVM-Light的应用程序.我需要创建同一个View的多个实例,每个实例都应绑定到自己的ViewModel.

默认情况下将ViewModelLocatorViewModels实现为单例,因此同一View的不同实例将绑定到同一ViewModel.

我可以在VMLocator中创建ViewModel作为非静态对象(就像返回新VM()...一样简单),但这只会对我有所帮助.事实上,我仍然需要跟踪打开的窗口.然而,每个窗口可能会打开其他几个窗口(不同类型).在这种情况下,我可能需要在父View及其所有子项上执行一些操作.例如,在关闭View P之前,我可能想要关闭它的所有子节点(视图C1,视图C2等).

因此,有没有简单易行的方法来实现这一目标?或者你有什么建议我遵循的最佳做法?

提前感谢您的宝贵帮助.

干杯,
Gianluca.

c# wpf mvvm mvvm-light

12
推荐指数
1
解决办法
3575
查看次数

使用MVVM在TreeView中显示实体

我正在按照MVVM模式制作WPF应用程序.在这我使用实体框架,

我的实体结构很简单,它有3个实体:部门,课程,书籍,

一个部门可以有很多课程,一门课程可以有很多书,

现在我想在树视图中显示这个,所以我在wpf中的输出应该是这样的,

Department1

  Course1

    Book1

    Book2

  Course2

    Book3

Department2

  Course

     Book

Department3   
Run Code Online (Sandbox Code Playgroud)

在我的ViewModel中我有EntityContext对象.但我不知道如何在树视图中显示这一点.我怎么能做到这一点.

c# wpf entity-framework mvvm

12
推荐指数
1
解决办法
9909
查看次数

Clojure中mod和rem的区别

我无法理解这两个(mod&rem)函数之间的区别.

clojure clojurescript

12
推荐指数
2
解决办法
1471
查看次数

将XML读入字典

我需要将XML文件读入字典.

我阅读了一些指南,我只是对我不理解的奇怪单词(如节点,XML验证等)感到困惑.那么,请你帮我一下走吧?

我有一个XML文件,以这种格式编写:

<database>
    <def number="1" name="one"/>
    <def number="2" name="two"/>
</database>
Run Code Online (Sandbox Code Playgroud)

如上所述,我想将它存储在字典中.我该怎么办呢?

c# xml dictionary readxml

10
推荐指数
2
解决办法
1万
查看次数

C#有预定义的符号吗?

在C++中我有这个:http://msdn.microsoft.com/en-us/library/b0084kay(v = vs.80).aspx.

所以我可以编写只在我调试时运行的代码,或者只针对特定平台(PowerPC,MIPS,Power Macintosh等),它不再受支持,但它是一个非常好的例子.您也可以在32位和64位系统之间进行切换(当然,这仅在您发布2个不同版本时才有用,每个版本都有自己的处理器架构.在C#中,这是一种罕见的需求,但它仍然存在).

所以我的问题是如果C#中存在类似的东西.我意识到没有宏,但是有一些符号(即使是相同的#define关键字.所以它至少对我来说是有意义的 - 它应该存在.

c# preprocessor-directive

9
推荐指数
3
解决办法
4672
查看次数

沙盒中的Cabal配置抱怨"已安装的软件包上至少缺少以下依赖项"

我有一个项目,这是一个沙盒里面,我在小集团文件中引入一个测试套件,它build-dependshunit ==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但没有成功.

haskell cabal

9
推荐指数
1
解决办法
2708
查看次数

管理外语分配内存的正确方法是什么?

我的情况非常简单:我有一个C++应用程序和一个Haskell库,我只需要从Haskell导出一个返回C字符串的函数.

问题是C字符串最初是一个String,并且要从中获取C字符串,我需要分配存储,这必须被显式解除分配(Haskell free或者finalizerFree,作为文档newCString说明).

处理这个问题的好方法是什么?具体来说,我有一些注意事项:

理想情况下,我想以某种方式让Haskell运行时GC处理这个问题,但我不确定它是什么时候可以知道外来方还需要内存的时间和时间.可能吗?

如果没有,我可以只调用C free或者是CStringHaskell运行时维护的存储吗?如果不是,我想我将不得不出口Haskell free并从外方调用它,对吗?

haskell memory-management ffi ghc

9
推荐指数
1
解决办法
273
查看次数

获取位图文件名

我使用下面的这一行来创建我的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)

我的问题是 - 如何从属性中获取文件名位图.
简单地说,我需要保存位图,并使用与我发起它的名称相同的位图.

谢谢

c# filenames bitmap save

8
推荐指数
3
解决办法
2万
查看次数

阴谋(依赖)地狱背后的原因是什么?

如何在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(我对它不是很熟悉,但它会有意义).

haskell cabal

8
推荐指数
1
解决办法
1127
查看次数