C#如何把List of Object轉換成List of T具體類型


上周碼程序的時候碰到個問題,因為設計上的約束,一個方法接受的參數只能為List<object>類型,然而該方法需要處理的真實數據則是確定的List<Currency>。然而C#不允許顯示的直接轉換類型,並且兩個方向上都不可以操作。這個問題讓我爆了一會兒,最后在MSDN上找到了一個OfType<T>的拓展方法可以完成這件事。

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication1
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            List<object> currencyListOfType = new List<object>()
            {
                new Currency(){Id = Guid.NewGuid(), Name = "a"},
                new Currency(){Id = Guid.NewGuid(), Name = "b"},
                new Currency(){Id = Guid.NewGuid(), Name = "c"}
            };

            List<object> currencyListCast = new List<object>()
            {
                "a", "b", "c"
            };
            //=>OfType如果元素存在轉換不了,也不會出現異常;只轉換成功的元素;如果轉換不了currencies則為空的List,而不是NULL
            List<Currency> currencies = currencyListOfType.OfType<Currency>().ToList();
            //=>Cast如果元素轉換不了,則會失敗。
            List<Currency> currencies1 = currencyListCast.Cast<Currency>().ToList();

            Console.WriteLine("currencies list:");
            foreach (var item in currencies)
            {
                Console.WriteLine(item.Id);
            }

            Console.WriteLine("currencies1 list:");
            foreach (var item in currencies1)
            {
                Console.WriteLine(item.Id);
            }

            Console.ReadLine();
        }
    }

    public class Currency
    {
        public Guid Id { get; set; }

        public string Name { get; set; }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM