c# - (cast)variable 和 ((cast)variable) 有什么区别

标签 c# casting

我有以下代码:

T imageCollectionItem;

// This checks if image actually exists, if it doesn't it gets the next best one... Thumbnail wil always exist so it will always find one
imageCollectionItem = (this.ResizedImageCollection
    .Where(x => ((IBaseImage)x).Image.ImageSizeType.Key != ImageSizeType.Original)
    .OrderByDescending(x => ((IBaseImage)x).Image.ImageSizeType.Key == imageSizeTypeKey)
    .ThenBy(x => ((IBaseImage)x).Image.ImageSizeType.Order)
    .FirstOrDefault());

if( imageCollectionItem != null )
{
    return ((IBaseImage)imageCollectionItem).Image; // Compiles fine
    return (IBaseImage)imageCollectionItem.Image; // Fails
}

(cast)variable((cast)variable) 有什么区别?

考虑一个编译,一个不编译?

最佳答案

if( imageCollectionItem != null )
{
    return ((IBaseImage)imageCollectionItem).Image; // Compiles fine
    return (IBaseImage)imageCollectionItem.Image; // Fails
}

第一行运行是因为 .Image 是在已转换为正确接口(interface)的对象上运行的。

在第二行中,直到 调用 .Image 属性后才进行强制转换——我假设这会导致“找不到成员”错误或类似错误.

关于c# - (cast)variable 和 ((cast)variable) 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29627754/

相关文章:

c# - 适用于 Windows 7 的带有 GUI 的 Perl 应用程序

c - C中的冒泡排序文件

java - 通过网络写入 4 个字节的无符号整数

c# - 类型 'TNestedInterface' 必须可转换为 'INestedInterfaceTest' 才能将其用作参数 'TNestedInterface'

C#: "(subtype)data"和 "data as subtype"类型转换之间有什么区别吗?

c# - 如何在 C# 中为任何用户创建 "AppData\Roaming"中的文件文本

c# - 如何确定相对路径是否指向给定路径之外

c - 在 C 中打印一个带有两位小数但没有尾随零的 float

C#:将 T 转换为 T[]

c++ - 无效转换导致的堆损坏?