我总是错过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) 我试图用两个索引器绑定索引属性.该物业看起来像这样
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].图像作为下一个参数.我错过了什么?
你如何从"并发地图读取和地图写入"的运行时恐慌中恢复?恢复的通常延迟似乎不起作用.这是为什么?
我知道你不应该在并发环境中使用地图,但仍然:如何在这里恢复?
例:
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)
请添加恢复代码.:)
在尝试VS2010b2之后,我的VS2008安装也将解决方案和项目文件的版本更改为"版本10.00".我们的CI服务器上的MSBuild.exe不支持它们.有没有办法让VS2008再次生成版本号为9.00的.sln文件?
我知道我可以手动修复它.但是每次我打开解决方案时,版本都会变回来,这很烦人.
干杯,
BJA
versions projects-and-solutions visual-studio visual-studio-2010-beta-2
这是我基本上要做的事情:
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)
我在这里错过了什么?是否有替代解决方案来更改上下文中的目录?
请问,有人可以解释为什么这里的函数类型被推断为字符串 - >字符串?
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)
但我真的知道这将是一个字符串