System.String[*]这是个什么类型?

whoyousee 2012-02-14 03:05:25
从一个Word文档获取交叉引用。“x”监视显示是 dynamic{string[]}

可是强制转换成string[]或迭代都报错:
无法将类型为“System.String
  • ”的对象强制转换为类型“System.String
  • []”。


    dynamic x = curDoc.GetCrossReferenceItems(WdReferenceType.wdRefTypeNumberedItem);
    foreach (dynamic CrossReference in curDoc.GetCrossReferenceItems(WdReferenceType.wdRefTypeNumberedItem))
    {

    }
...全文
411 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
whoyousee 2012-02-15
  • 打赏
  • 举报
回复
非常感谢...

这样正确:
object x = curDoc.GetCrossReferenceItems(WdReferenceType.wdRefTypeNumberedItem);
Array dd = (Array)x;


这样错误:
Array x = (Array)curDoc.GetCrossReferenceItems(WdReferenceType.wdRefTypeNumberedItem);




[Quote=引用 5 楼 youzelin 的回复:]
x 目前是 dynamic 类型,实际下拉感知框当做 object 处理,你要强制转换成 Array 才能得到正确的方法调用。
[/Quote]
youzelin 2012-02-14
  • 打赏
  • 举报
回复
x 目前是 dynamic 类型,实际下拉感知框当做 object 处理,你要强制转换成 Array 才能得到正确的方法调用。
whoyousee 2012-02-14
  • 打赏
  • 举报
回复
不知道这个x怎么使用啊,x.GetValue(1),都出错,连x.Length都出错?
[Quote=引用 3 楼 youzelin 的回复:]
C# code

// 测试数据
var arr = Array.CreateInstance(typeof(string), new int[] { 3 }, new int[] { 2 });
arr.SetValue("A", 2);
arr.SetValue("B", 3);
arr.SetValue("C", 4);

var arr2 = new string[arr.……
[/Quote]
youzelin 2012-02-14
  • 打赏
  • 举报
回复

// 测试数据
var arr = Array.CreateInstance(typeof(string), new int[] { 3 }, new int[] { 2 });
arr.SetValue("A", 2);
arr.SetValue("B", 3);
arr.SetValue("C", 4);

var arr2 = new string[arr.GetLength(0)];
var arrLB = arr.GetLowerBound(0);

for (int i = 0; i < arr2.Length; i++)
{
arr2[i] = (string)arr.GetValue(i + arrLB);
Console.WriteLine(arr2[i]);
}
youzelin 2012-02-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]

  • ,下标是星号啥意思
  • [/Quote]

    * 表示 CLR 知道这个数组不是 0 基数组。所以 返回的类型为 System.String

  • 楼主,你无法将非 0 基数组直接转化为 0 基一维数组的。
bdmh 2012-02-14
  • 打赏
  • 举报
回复
  • ,下标是星号啥意思

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧