我有一本字典,当它没有预先存在的值符合某个标准时,故意设置为失败。
所有其他时间,此命令将起作用,但一次。我希望我做对了......失败意味着没有任何反应。我不需要 Dim fmt As StringFormat = New StringFormat(StringFormatFlags.LineLimit)
fmt.LineAlignment = StringAlignment.Center
fmt.Trimming = StringTrimming.EllipsisCharacter
Dim y As Single = e.MarginBounds.Top
Dim rc As Rectangle
Dim x As Int32
Dim h As Int32 = 0
Do While mRow < dgvChemical.RowCount
Dim row As DataGridViewRow = dgvChemical.Rows(mRow)
x = e.MarginBounds.Left
h = 0
If newPage Then
For Each cell As DataGridViewCell In row.Cells
rc = New Rectangle(x, y, cell.Size.Width, cell.Size.Height)
e.Graphics.FillRectangle(Brushes.LightGray, rc)
e.Graphics.DrawRectangle(Pens.Black, rc)
e.Graphics.DrawString(dgvChemical.Columns(cell.ColumnIndex).HeaderText, dgvChemical.Font, Brushes.Black, rc, fmt)
x += rc.Width
h = Math.Max(h, rc.Height)
Next
y += h
mRow += 0
End If
newPage = False
x = e.MarginBounds.Left
For Each cell As DataGridViewCell In row.Cells
rc = New Rectangle(x, y, cell.Size.Width, cell.Size.Height)
e.Graphics.DrawRectangle(Pens.Black, rc)
e.Graphics.DrawString(cell.FormattedValue.ToString(), dgvChemical.Font, Brushes.Black, rc, fmt)
x += rc.Width
h = Math.Max(h, rc.Height)
Next
y += h
mRow += 1
If y + h > e.MarginBounds.Bottom Then
e.HasMorePages = True
newPage = True
Return
End If
Loop
mRow = 0
Dim ps As PaperSize
For ix As Integer = 0 To PrintDocument1.PrinterSettings.PaperSizes.Count - 1
If PrintDocument1.PrinterSettings.PaperSizes(ix).Kind = PaperKind.A3 Then
ps = PrintDocument1.PrinterSettings.PaperSizes(ix)
PrintDocument1.DefaultPageSettings.PaperSize = ps
PageSetupDialog1.PageSettings.PaperSize = ps
End If
Next`
或任何其他应急代码。
但是这样吗?
else
答案 0 :(得分:1)
当您隐式解包可选项时,可以在单个语句中检查和解包其值。所以你不需要任何错误处理代码
这样做
if let definiteString = assumedString {
print(definiteString)
}
相当于
if assumedString != nil {
print(assumedString)
}
您可以阅读有关隐式展开的可选here
的更多信息答案 1 :(得分:1)
这不完全正确,问题是转换为int也是可选的。例如,这会崩溃(或者更确切地说,你会得到一个编译错误):
let myDictionary = [3: "3"]
let itemID = "b"
if let myTestKonstant = myDictionary[Int(itemID)] {
print(myTestKonstant)
}
这将是保存方式:
if let itemKey = Int(itemID), let myTestKonstant = myDictionary[itemKey] {
print(myTestKonstant)
}
<强>更新强>
所以更清楚,我将解释在不同情况下会发生什么:
itemID
无法转换为Int
:这意味着itemKey
将为nil
,因此,第二部分甚至不会进行测试,if的内容不会被执行。
itemID
可以转换为Int
,但它不是现有密钥:在这种情况下,itemKey
将设置为Int
{{ 1}}被转换为。然后,将测试第二个语句,但由于itemID
不会被发现为现有键,itemKey
将返回myDictionary[itemKey]
,并且再次,if的内容将不会被执行。
nil
可以转换为作为字典键的itemID
。与前一种情况一样,Int
将被设置,并且由于找到了密钥,itemKey
将被填充并且if的内容将被执行,除非密钥的对应值是{{ 1}}(如myTestKonstant
)。