C#多播示例

时间:2012-02-10 12:34:22

标签: c# .net casting

有人可以为我写字面意思,这样我就能理解演员是如何进行的吗?括号的数量让我感到困惑。

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

只能找到简单的演员样本搜索(可能意味着我正在寻找错误的东西),这些都不是很有帮助。

4 个答案:

答案 0 :(得分:11)

首先,e.Result被转换为Object

类型的数组
(Object[])e.Result

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

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

希望有所帮助。

答案 1 :(得分:4)

为了理解操作的顺序,您需要记住,强制转换将应用于右侧的对象,但影响WHEN应用的规则取决于MSDN的Operator precedence and associativity

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

变为

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

将强制转换操作分组为“一元运算符”类别,该类别的优先级低于索引器 - [],它位于“主要表达式”类别中。

在原始行中 - 在演员周围需要():((Object [])e.Result)因为索引器 - []立即应用于左边的对象作为第一优先级。如果没有around(),则会在索引器之后应用强制转换,并且由于e.Result是(可能是?)类型对象,因此在编译时会失败。如果没有(),行就会显示:

(Object[])e.Result[1] 

哪个无效。

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

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

第二次演员将演员对象[]的第一个元素(在我的示例演员阵容1中)转换为字典

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

答案 2 :(得分:4)

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

答案 3 :(得分:2)

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