簡體   English   中英

如何將分配給Object的c#基本類型數組轉換為可以迭代的對象?

[英]how to transform array of c# primitive type assigned to Object into something I can iterate through?

我試圖遍歷對象中的字段(使用反射,通過FieldInfo)並轉儲它們的值...而只是陷入了C#vs Java陷阱。

我遇到的問題是

  1. FieldInfo.GetValue(srcObject)可以將int [](或其他一些原始值數組)作為Object返回

  2. C#不允許您將持有int []的對象轉換為Object []

因此,如果

System.Object val = fieldInfo.GetValue(srcObject)

val.GetType().IsArray返回'True'

...我需要做什么

  1. 在運行時是否認識到“ val”是“一個對象,它是一個數組,而不是對象的數組”?

  2. 變換“VAL”到我可以遍歷可印刷值的陣列?

您可以首先將其轉換為System.Collections.IEnumerable ,因為所有數組都是可枚舉的:

    Foo f = new Foo();
    var fieldInfo = typeof(Foo).GetField("field");
    var value = fieldInfo.GetValue(f);
    if (value.GetType().IsArray) {
        var enumerable = (IEnumerable)value;
        foreach (var item in enumerable) {
            Console.WriteLine(item);
        }
    }

如果您具有多維數組,並且想要獲取每個維的長度,則可以將其ArrayArray

    if (value.GetType().IsArray) {
        var array = (Array)value;

然后,您可以致電GetLength

int firstDimensionLength = array.GetLength(0);
int secondDimensionLength = array.GetLength(1);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM