如何在一行代码中转换对象并调用函数?

时间:2016-04-07 02:21:41

标签: c# casting

在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'可以找到

3 个答案:

答案 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