c# foreach (property in object)… Is there a simple way of doing this?

前端 未结 9 2063
感情败类
感情败类 2020-11-28 22:10

I have a class containing several properties (all are strings if it makes any difference).
I also have a list, which contains many different instances of the class.

9条回答
  •  一个人的身影
    2020-11-28 22:38

    I looked for the answer to a similar question on this page, I wrote the answers to several similar questions that may help people who enter this page.

    Class List

    List < T > class represents the list of objects which can be accessed by index. It comes under the System.Collection.Generic namespace. List class can be used to create a collection of different types like integers, strings etc. List class also provides the methods to search, sort, and manipulate lists.

    Class with property:

    class TestClss
    {
        public string id { set; get; }
        public string cell1 { set; get; }
        public string cell2 { set; get; }
    }
    var MyArray = new List {
        new TestClss() { id = "1", cell1 = "cell 1 row 1 Data", cell2 = "cell 2 row 1 Data" },
        new TestClss() { id = "2", cell1 = "cell 1 row 2 Data", cell2 = "cell 2 row 2 Data" },
        new TestClss() { id = "3", cell1 = "cell 1 row 2 Data", cell2 = "cell 2 row 3 Data" }
    };
    foreach (object Item in MyArray)
    {
        Console.WriteLine("Row Start");
        foreach (PropertyInfo property in Item.GetType().GetProperties())
        {
            var Key = property.Name;
            var Value = property.GetValue(Item, null);
            Console.WriteLine("{0}={1}", Key, Value);
        }
    }
    

    OR, Class with field:

    class TestClss
    {
        public string id = "";
        public string cell1 = "";
        public string cell2 = "";
    }
    var MyArray = new List {
        new TestClss() { id = "1", cell1 = "cell 1 row 1 Data", cell2 = "cell 2 row 1 Data" },
        new TestClss() { id = "2", cell1 = "cell 1 row 2 Data", cell2 = "cell 2 row 2 Data" },
        new TestClss() { id = "3", cell1 = "cell 1 row 2 Data", cell2 = "cell 2 row 3 Data" }
    };
    foreach (object Item in MyArray)
    {
        Console.WriteLine("Row Start");
        foreach (var fieldInfo in Item.GetType().GetFields())
        {
            var Key = fieldInfo.Name;
            var Value = fieldInfo.GetValue(Item);
        }
    
    }
    

    OR, List of objects (without same cells):

    var MyArray = new List {
        new { id = "1", cell1 = "cell 1 row 1 Data", cell2 = "cell 2 row 1 Data" },
        new { id = "2", cell1 = "cell 1 row 2 Data", cell2 = "cell 2 row 2 Data" },
        new { id = "3", cell1 = "cell 1 row 2 Data", cell2 = "cell 2 row 3 Data", anotherCell = "" }
    };
    foreach (object Item in MyArray)
    {
        Console.WriteLine("Row Start");
        foreach (var props in Item.GetType().GetProperties())
        {
            var Key = props.Name;
            var Value = props.GetMethod.Invoke(Item, null).ToString();
            Console.WriteLine("{0}={1}", Key, Value);
        }
    }
    
    

    OR, List of objects (It must have the same cells):

    var MyArray = new[] {
        new { id = "1", cell1 = "cell 1 row 1 Data", cell2 = "cell 2 row 1 Data" },
        new { id = "2", cell1 = "cell 1 row 2 Data", cell2 = "cell 2 row 2 Data" },
        new { id = "3", cell1 = "cell 1 row 2 Data", cell2 = "cell 2 row 3 Data" }
    };
    foreach (object Item in MyArray)
    {
        Console.WriteLine("Row Start");
        foreach (var props in Item.GetType().GetProperties())
        {
            var Key = props.Name;
            var Value = props.GetMethod.Invoke(Item, null).ToString();
            Console.WriteLine("{0}={1}", Key, Value);
        }
    }
    

    OR, List of objects (with key):

    var MyArray = new {
        row1 = new { id = "1", cell1 = "cell 1 row 1 Data", cell2 = "cell 2 row 1 Data" },
        row2 = new { id = "2", cell1 = "cell 1 row 2 Data", cell2 = "cell 2 row 2 Data" },
        row3 = new { id = "3", cell1 = "cell 1 row 2 Data", cell2 = "cell 2 row 3 Data" }
    };
    // using System.ComponentModel;  for TypeDescriptor
    foreach (PropertyDescriptor Item in TypeDescriptor.GetProperties(MyArray))
    {
        string Rowkey = Item.Name;
        object RowValue = Item.GetValue(MyArray);
        Console.WriteLine("Row key is: {0}", Rowkey);
        foreach (var props in RowValue.GetType().GetProperties())
        {
            var Key = props.Name;
            var Value = props.GetMethod.Invoke(RowValue, null).ToString();
            Console.WriteLine("{0}={1}", Key, Value);
        }
    }
    

    OR, List of Dictionary

    var MyArray = new List>() {
        new Dictionary() { { "id", "1" }, { "cell1", "cell 1 row 1 Data" }, { "cell2", "cell 2 row 1 Data" } },
        new Dictionary() { { "id", "2" }, { "cell1", "cell 1 row 2 Data" }, { "cell2", "cell 2 row 2 Data" } },
        new Dictionary() { { "id", "3" }, { "cell1", "cell 1 row 3 Data" }, { "cell2", "cell 2 row 3 Data" } }
    };
    foreach (Dictionary Item in MyArray)
    {
        Console.WriteLine("Row Start");
        foreach (KeyValuePair props in Item)
        {
            var Key = props.Key;
            var Value = props.Value;
            Console.WriteLine("{0}={1}", Key, Value);
        }
    }
    

    Good luck..

    提交回复
    热议问题