在C#中,如何将对象转换为另一个对象类型,以便我可以调用只有强制转换对象的函数?我想在一行代码中执行此操作。
这是我的代码,我在其中创建了一个强制类型的新对象:
if (_attributes[i] is DynamicPropertyAttribute)
{
var attribute = _attributes[i] as DynamicPropertyAttribute;
attribute.Compile();
}
我试图在一行代码中执行上述操作。
这就是我所拥有的:
if (_attributes[i] is DynamicPropertyAttribute)
{
(DynamicPropertyAttribute)_attributes[i].Compile();
}
这是错误:
' System.Attribute'不包含'编译'的定义和不 扩展方法'编译'接受第一个类型的参数 ' System.Attribute'可以找到
答案 0 :(得分:2)
在演员周围包裹括号。
((DynamicPropertyAttribute)_attributes[i]).Compile();
答案 1 :(得分:2)
如果您使用的是c#6,可以使用“?”运算符使其更简单,有时也称为“安全导航运算符”。
//no need for the if check anymore
(_attributes[i] as DynamicPropertyAttribute)?.Compile();
答案 2 :(得分:0)
您可以使用以下命令来演示并在一行中调用该函数:
if (_attributes[i] is DynamicPropertyAttribute)
{
(_attributes[i] as DynamicPropertyAttribute).Compile();
}
但是,如果您使用的是C#6.0,则可以使用Null条件运算符 ?.
,并避免使用显式空值检查,从而使代码更易于阅读。
(_attributes[i] as DynamicPropertyAttribute)?.Compile();
来自MSDN https://msdn.microsoft.com/en-us/library/dn986595.aspx的示例:
int? length = customers?.Length; // null if customers is null
Customer first = customers?[0]; // null if customers is null
int? count = customers?[0]?.Orders?.Count(); // null if customers, the first customer, or Orders is null