我一直在阅读SharePoint 2010的工作,我注意到我从书籍到教学视频遇到的许多代码示例都是以我从未在C#中存在过的方式呈现SharePoint对象(并且认为是VB独家):
SPWeb web = properties.Feature.Parent as SPWeb;
我习惯于以这种方式({1}}之外的方式进行转换(如果有任何特殊原因)我曾经遇到过使用VB-esque强制转换符号的大部分内容。
答案 0 :(得分:6)
as
在C#中被称为安全强制转换运算符。这与正常演员之间存在语义差异。如果类型无法转换,安全转换将不会抛出异常;它将返回null。如果无法转换类型,则正常投射会抛出InvalidCastException
。
换句话说,如果父类型不是SPWeb类型,则此代码会分配null
SPWeb web = properties.Feature.Parent as SPWeb;
如果Parent的类型不正确,则抛出另一个版本:
SPWeb web = (SPWeb)properties.Feature.Parent;
如果您不确定某个对象是否可以转换为所需类型,则as
运算符非常有用 - 在这种情况下,通常使用as
然后检查空值。 as
仅适用于引用类型,因为值类型不能为空。
this longer article on MSDN中也对此进行了解释。
顺便说一句,VB中的等效运算符是TryCast
(与DirectCast
对比。)
答案 1 :(得分:2)
obj as T
是
的语法糖obj is T ? (T)obj : null
因此,它是一个“安全”演员。但是,理论上它需要更长的时间。因此,除非特别想要一个对象不是预期类型的null,否则你应该使用普通的强制转换。更常见的是,您最好手动处理它:
if (!(obj is T))
{
// Handle the case where obj is of an unexpected type.
}
T tobj = (T)obj;
答案 2 :(得分:1)
如果父级不是SPWeb类型,则使用作为关键字将变量 web 设置为null。
如果Parent不是SPWeb类型,那么显式转换将抛出异常。
答案 3 :(得分:1)
“as”比(强制转换)更安全,因为它将返回给定类型的值或null。 您会发现以下行将(或应该)测试null。
答案 4 :(得分:1)
如果强制转换失败,则赋值的变量变为null而不是抛出异常'InvalidCastException'