C# 4.0 CodeContracts:需要未经验证的:(image.PixelFormat&;PixelFormat.index)=0

C# 4.0 CodeContracts:需要未经验证的:(image.PixelFormat&;PixelFormat.index)=0,c#-4.0,code-contracts,requires,C# 4.0,Code Contracts,Requires,Net 4.0代码契约中的以下警告是什么意思?如何修复它 CodeContracts:需要未经验证的:(image.PixelFormat和PixelFormat.index)==0 我正在做:var bmp=新位图(pSize.Width,pSize.Height,System.Drawing.Imaging.PixelFormat.index)或var g=Graphics.FromImage(this.\u otherBitmap) 顺便说一句:有一些关于和如果你和的问题,但它们是2009

Net 4.0代码契约中的以下警告是什么意思?如何修复它

CodeContracts:需要未经验证的:(image.PixelFormat和PixelFormat.index)==0

我正在做:
var bmp=新位图(pSize.Width,pSize.Height,System.Drawing.Imaging.PixelFormat.index)
var g=Graphics.FromImage(this.\u otherBitmap)

顺便说一句:有一些关于和如果你和的问题,但它们是2009年到2011年。2013年现在。。。你觉得怎么样

提前感谢

问题是不能与索引位图一起使用,相应的合同程序集(
System.Drawing.Contracts.dll
)包含强制执行该功能的先决条件。静态检查器在代码中找不到任何东西来证明需求得到满足,因此它会向您发出警告

您必须确保未使用
PixelFormat.index
格式创建
this.\u otherBitmap
。如果您完全确定不是,可以在调用
Graphics.FromImage()
的上方添加这一行:


…但由于警告告诉您有关
FromImage()
方法的实际需求,如果您错了,它将断言或抛出异常。

请显示更多上下文。你定义了那个契约吗?我个人认为代码契约很棒。如果实施得当,它们至少可以节省样板单元测试的大量工作。它仍在积极开发中(上一个版本是几周前发布的),但事实上,购买力并没有我所希望的那么强。那么,@jeremy todd你有什么建议_otherBitmap是基于bmp图像的,只是otherBitmap稍微大一点,在bmp上面有其他图形。有没有办法确保PixelFormat没有索引???索引是一种风险吗???并不是索引是一种“风险”,只是你不能用它来创建一个
Graphics
对象——如果你尝试,它会抛出一个异常。您必须转到创建
\u其他位图
的任何位置,并确保它使用非索引格式,如
PixelFormat.Format24bppRgb
。您可能仍然需要添加我提到的
Contract.aspection()
行来消除警告,但至少您知道这是一个安全的假设。
Contract.Assume((this._otherBitmap.PixelFormat & PixelFormat.Indexed) == 0);