有人可以为我写字面意思,这样我就能理解演员是如何进行的吗?括号的数量让我感到困惑。
(Dictionary<String, String>)((Object[])e.Result)[1];
只能找到简单的演员样本搜索(可能意味着我正在寻找错误的东西),这些都不是很有帮助。
答案 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;