我希望这两个代码示例都有相同的结果:
<uc1:TestCustControl SkinID="GridViewNew" Runat="server" HeaderStyle-Wrap="false" PageSize="50" GridLines="None" CellPadding="4" width="100%" CssClass="GridViewStyle" >
<HeaderStyle CssClass="GridViewHeaderStyle" />
<RowStyle CssClass="GridViewRowStyle" />
<AlternatingRowStyle CssClass="GridViewAlternatingRowStyle"/>
<SelectedRowStyle CssClass="GridViewSelectedRowStyle" />
<PagerStyle CssClass="GridViewPagerStyle" />
<FooterStyle CssClass="GridViewFooterStyle" />
</uc1:TestCustControl>
<asp:GridView SkinID="GridViewNew" Runat="server" HeaderStyle-Wrap="false" PageSize="20" GridLines="None" CellPadding="4" width="100%" CssClass="GridViewStyle" >
<HeaderStyle CssClass="GridViewHeaderStyle" />
<RowStyle CssClass="GridViewRowStyle" />
<AlternatingRowStyle CssClass="GridViewAlternatingRowStyle"/>
<SelectedRowStyle CssClass="GridViewSelectedRowStyle" />
<PagerStyle CssClass="GridViewPagerStyle" />
<FooterStyle CssClass="GridViewFooterStyle" />
</asp:GridView>
let maybe_string = Some(String::from("foo"));
let string = if let Some(ref value) = maybe_string { value } else { "none" };
第二个样本给我一个错误:
let maybe_string = Some(String::from("foo"));
let string = maybe_string.as_ref().unwrap_or("none");
答案 0 :(得分:4)
因为这是Option::as_ref
的定义方式:
impl<T> Option<T> {
fn as_ref(&self) -> Option<&T>
}
由于您有Option<String>
,因此结果类型必须为Option<&String>
。
相反,您可以添加String::as_str
:
maybe_string.as_ref().map(String::as_str).unwrap_or("none");
或更短的:
maybe_string.as_ref().map_or("none", String::as_str);
最后,您还可以使用Option::deref
。
另见: