C#多播示例

5

请问能否为我提供直接的代码翻译,以便我理解强制类型转换是如何进行的?括号的数量让我感到困惑。

(Dictionary<String, String>)((Object[])e.Result)[1];

在我的搜索中,只找到了一些简单的类型转换示例(可能意味着我搜索的不是很准确),它们并没有太大的帮助。

4个回答

11

首先,e.Result被转换为类型为Object的数组。

(Object[])e.Result

然后,该数组中索引为 1 的项 [1] 被转换为一个类型为<string, string> 的字典。

(Dictionary<String, String>)((Object[])e.Result)[1];

希望这有所帮助。


4
为了理解运算顺序,您需要记住类型转换将应用于右侧的对象,但影响何时应用它的规则取决于MSDN的运算符优先级和结合性
(Dictionary<String, String>)((Object[])e.Result)[1];

成为
Object[] cast1 = (Object[]) e.Result;

类型转换操作被归为“一元操作符”类别,优先级低于索引器-[],后者属于“主表达式”类别。

在原始代码中,()必须放在类型转换操作的周围:((Object[])e.Result),因为索引器-[]会立即作为第一个优先级应用于左侧的对象。如果没有括号,类型转换将在索引器之后应用,由于e.Result很可能是object类型,这将在编译时失败。没有括号的行看起来像:

(Object[])e.Result[1] 

哪个是无效的。

((Object[])e.Result)[1] 

确保首先将e.Result强制转换为Object[]类型,然后使用索引器访问第一个元素。

第二个强制转换将转换后的object[](在我的示例中为cast 1的第一个元素)转换为Dictionary。

Dictionary<String, String> cast2 = (Dictionary<String, String>) cast1[1];

4
Object[] cast1 = (Object[])e.Result;
Object secondElement = cast1 [1];
Dictionary<String, String> cast2 = (Dictionary<String, String>)secondElement;

2
object[] cast1result = (object[]) e.Result;
object dictionaryElement = cast1result[1];
Dictionary<string, string> cast2result = (Dictionary<string, string>) dictionaryElement;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接