小编Igo*_*kin的帖子

抛出无效对象状态的异常是什么?

我总是错过c#中的内置异常类型,这表示对象已损坏.你在这种情况下扔了什么?

通常我会想念它,当我意识到一个应该在一个对象上工作的方法,如果该对象具有某种状态就会失败.在这种情况下,我经常怀疑这种状态可能永远不会达到.但是对它采取防御措施,我想抛出异常以防万一(例如在未来的代码更改之后).

对于方法参数ArgumentException,我们可以拒绝无效参数.但对于对象状态?在Java中我会使用IllegalStateException.

当然,你可以争辩说,实际改变状态的方法可以检查状态的正确性.而且他们应该更好,但如果他们不这样做(比如传统的上帝班)?

编辑:

虽然InvalidOperationException似乎是最合适的,但正如公认的答案所述(以及这一个),请注意:

它很微妙,但在语义上它有不同的含义InvalidOperationException.InvalidOperationException表示对象的"协议"中的问题,调用者必须遵守该问题(例如,未初始化,已关闭,......).在我的情况下,调用者没有做错任何错误,它是被破坏的对象.我想准确传输那条消息.

例:

switch(this._someType) {
  case SomeType.A: doSomething(); break;
  case SomeType.B: doSomethingElse(); break;
  /*...*/
  default:
    // Unexpected type! Someone introduced a new type and didn't update this.
    throw new IllegalStateException("Unknown type "+this._someType); 
}
Run Code Online (Sandbox Code Playgroud)

.net c# exception

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

绑定到多个索引器

我试图用两个索引器绑定索引属性.该物业看起来像这样

public Item this[int x, int y]
{
  get { return _items[x, y]; }
  set { _items[x, y] = value; }
}
Run Code Online (Sandbox Code Playgroud)

根据http://msdn.microsoft.com/en-us/library/ms742451.aspx,可以绑定索引属性,如

<object Path="propertyName[index,index2...]" .../>
Run Code Online (Sandbox Code Playgroud)

甚至有一个例子:

<Rectangle Fill="{Binding ColorGrid[20,30].SolidColorBrushResult}" .../>
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在XAML中访问该属性时:

<Image Source="{Binding Items[0,0].Image}" />
Run Code Online (Sandbox Code Playgroud)

我在设计师中遇到错误:

未命名的参数"0] .Image"必须出现在命名参数之前.

它似乎解释为0].图像作为下一个参数.我错过了什么?

wpf binding indexed-properties windows-phone

3
推荐指数
1
解决办法
838
查看次数

如何从并发映射写入中恢复?

你如何从"并发地图读取和地图写入"的运行时恐慌中恢复?恢复的通常延迟似乎不起作用.这是为什么?

我知道你不应该在并发环境中使用地图,但仍然:如何在这里恢复?

例:

package main

import "time"

var m = make(map[string]string)

func main() {
    go func() {
        for {
            m["x"] = "foo"
        }
    }()
    go func() {
        for {
            m["x"] = "foo"
        }
    }()

    time.Sleep(1 * time.Second)
}
Run Code Online (Sandbox Code Playgroud)

请添加恢复代码.:)

concurrency dictionary go panic goroutine

3
推荐指数
1
解决办法
1681
查看次数

Visual Studio 2008将解决方案文件标记为版本10.00

在尝试VS2010b2之后,我的VS2008安装也将解决方案和项目文件的版本更改为"版本10.00".我们的CI服务器上的MSBuild.exe不支持它们.有没有办法让VS2008再次生成版本号为9.00的.sln文件?

我知道我可以手动修复它.但是每次我打开解决方案时,版本都会变回来,这很烦人.

干杯,

BJA

versions projects-and-solutions visual-studio visual-studio-2010-beta-2

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

sh.cd使用上下文管理器

这是我基本上要做的事情:

import sh, os

with sh.cd('/tmp'):
  print os.getcwd()

print os.getcwd()
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

line 3, in <module>
    with sh.cd('/tmp'):
AttributeError: __exit__
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?是否有替代解决方案来更改上下文中的目录?

python shell contextmanager

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

匹配中的函数类型推断

请问,有人可以解释为什么这里的函数类型被推断为字符串 - >字符串?

let myFunc a:string = 
    match a with 
    | "A" -> 1
    | _ -> 0
Run Code Online (Sandbox Code Playgroud)

当参数是通用的时,这种方法很好,但是一旦我添加:string,类型就会改变.为什么?

编辑: 我想声明参数类型是一个字符串,因为我实际上想要使用String.ToUpper()进行匹配:

let myFunc a:string = 
    match a.ToUpper() with 
    | "A" -> 1
    | _ -> 0
Run Code Online (Sandbox Code Playgroud)

有点尴尬的解决方案就是这样

let myFunc a = 
    match a.ToString().ToUpper() with 
    | "A" -> 1
    | _ -> 0
Run Code Online (Sandbox Code Playgroud)

但我真的知道这将是一个字符串

f#

0
推荐指数
1
解决办法
107
查看次数