第一个是工作,而第二个显示错误,有什么区别? 我阅读文档,并没有找到任何关于它的信息,它不是那么重要但想知道一些功能
public static string GetConcat2<T>(T q)
{
if(q.GetType() == typeof(A))
{
var z = q as A;
}
if (q.GetType() == typeof(A))
{
var z = (A)q;
}
return "!!!!";
}
public interface CustomInteface
{
string InterfaceProperty1 { get; set; }
string InterfaceProperty2 { get; set; }
string Concat();
}
public class A : CustomInteface
{
public string InterfaceProperty1 { get; set; }
public string InterfaceProperty2 { get; set; }
public string Concat() {
return InterfaceProperty1 + InterfaceProperty2;
}
}
答案 0 :(得分:1)
行var z = (A)q;
抛出错误,这意味着对象q
不属于A
类型。你试图施展的方式有点尴尬,你应该使用以下模式之一:
as
后跟null
检查:
var z = q as A;
if (z == null) { /*the cast failed*/ }
is
后跟显式投射
if (q is A)
{
var z = (A)q;
}
注意,如果强制转换失败,第一个模式将返回null
,第二个模式将抛出异常。这就是为什么你只在第二种情况下看到异常的原因,因为第一种情况是&#34;默默地&#34;失败。