最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c#將不同類型的數(shù)據(jù)存儲到一起的實現(xiàn)

 更新時間:2025年07月17日 08:32:32   作者:張謹?shù)W  
在C#中存儲不同類型的數(shù)據(jù)有多種方式,本文主要介紹了c#將不同類型的數(shù)據(jù)存儲到一起的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下

在 C# 中,存儲不同類型的數(shù)據(jù)有多種方式,具體選擇取決于你的需求(類型安全、性能、靈活性等)。以下是常見的解決方案及其適用場景:

1. 使用 object 類型(裝箱 / 拆箱)

將所有數(shù)據(jù)轉換為基類 object,利用 C# 的多態(tài)性存儲任意類型。

List<object> mixedList = new List<object>();
mixedList.Add(123);            // int → 裝箱為object
mixedList.Add("Hello");        // string(引用類型無需裝箱)
mixedList.Add(new DateTime()); // DateTime → 裝箱為object

// 訪問時需手動拆箱(可能引發(fā)InvalidCastException)
int num = (int)mixedList[0];   // 拆箱
string str = (string)mixedList[1];

優(yōu)點:簡單直接,無需額外類型定義。

缺點:

  • 裝箱 / 拆箱開銷:值類型(如 intDateTime)頻繁轉換會降低性能。
  • 類型不安全:運行時可能拋出 InvalidCastException。

2. 使用泛型集合 List<dynamic>

dynamic 關鍵字在運行時動態(tài)解析類型,避免編譯時類型檢查。

List<dynamic> dynamicList = new List<dynamic>();
dynamicList.Add(123);        // 無需裝箱
dynamicList.Add("Hello");
dynamicList.Add(new { Name = "Alice" }); // 匿名類型也可存儲

// 訪問時無需顯式轉換
int num = dynamicList[0];    // 動態(tài)類型解析
string str = dynamicList[1];

優(yōu)點:

  • 無需裝箱拆箱(值類型以原始類型存儲)。
  • 支持匿名類型等復雜結構。

缺點:

  • 運行時類型風險:若類型不匹配會在運行時拋出異常。
  • 性能開銷:動態(tài)解析比靜態(tài)類型稍慢。

3. 使用自定義類 / 結構體(推薦方案)

public class MixedData
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime BirthDate { get; set; }
}

// 使用方式
List<MixedData> dataList = new List<MixedData>();
dataList.Add(new MixedData { 
    Id = 1, 
    Name = "Alice", 
    BirthDate = DateTime.Now 
});

定義一個包含所需字段的類,每個字段使用明確的類型。

public class MixedData
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime BirthDate { get; set; }
}

// 使用方式
List<MixedData> dataList = new List<MixedData>();
dataList.Add(new MixedData { 
    Id = 1, 
    Name = "Alice", 
    BirthDate = DateTime.Now 
});

優(yōu)點:

  • 類型安全:編譯時檢查類型。
  • 可讀性高:字段含義明確。
  • 性能最優(yōu):無需裝箱拆箱。

缺點:需提前定義類型,不夠靈活。

4. 使用 Tuple 或 ValueTuple

適合臨時存儲少量不同類型的數(shù)據(jù)。

// Tuple(舊版,需通過Item1、Item2訪問)
var tupleList = new List<Tuple<int, string>>();
tupleList.Add(Tuple.Create(1, "Alice"));

// ValueTuple(C# 7.0+,推薦,支持命名元素)
var valueTupleList = new List<(int Id, string Name)>();
valueTupleList.Add((1, "Alice"));

// 訪問方式
int id = valueTupleList[0].Id;
string name = valueTupleList[0].Name;

優(yōu)點:簡潔,無需額外類定義。

缺點:

  • 元素數(shù)量有限(最多 8 個)。
  • 不適合復雜或大量數(shù)據(jù)。

5. 使用 Dictionary<string, object>

以鍵值對形式存儲不同類型的值,類似動態(tài)對象。

var dict = new Dictionary<string, object>();
dict["Id"] = 123;
dict["Name"] = "Alice";
dict["IsActive"] = true;
?
// 訪問時需轉換類型
int id = (int)dict["Id"];
bool isActive = (bool)dict["IsActive"];

優(yōu)點:靈活,可動態(tài)添加 / 刪除鍵值對。

缺點:

  • 類型不安全,需手動轉換。
  • 鍵名硬編碼,易出錯。

6. 使用接口或抽象類(面向對象設計)

定義公共接口,讓不同類型實現(xiàn)該接口。

public interface IDataItem { }

public class Person : IDataItem
{
    public string Name { get; set; }
}
?
public class Product : IDataItem
{
    public decimal Price { get; set; }
}
?
// 使用方式
List<IDataItem> items = new List<IDataItem>();
items.Add(new Person { Name = "Alice" });
items.Add(new Product { Price = 9.99m });
?
// 通過模式匹配訪問
foreach (var item in items)
{
    if (item is Person person)
        Console.WriteLine(person.Name);
    else if (item is Product product)
        Console.WriteLine(product.Price);
}

優(yōu)點:

  • 類型安全,符合面向對象原則。
  • 可擴展,易于添加新類型。

缺點:需設計接口和繼承體系,復雜度較高。

7. 使用 ExpandoObject(動態(tài)對象)

System.Dynamic.ExpandoObject 是動態(tài)類型的字典,支持運行時添加屬性。

dynamic person = new ExpandoObject();
person.Name = "Alice";
person.Age = 30;
?
// 直接訪問屬性(無需轉換)
Console.WriteLine(person.Name); // "Alice"

優(yōu)點:

  • 語法簡潔,像普通對象一樣訪問屬性。
  • 無需提前定義類型。

缺點:

  • 編譯時無類型檢查,易出錯。
  • 性能略低于靜態(tài)類型。

8.ArrayList(非泛型,不推薦)

特點:

  • 來自 System.Collections 命名空間,可存儲任意類型(實際存為 object)。
  • 動態(tài)擴容,但存在裝箱 / 拆箱開銷類型安全問題。

示例:

using System.Collections;
ArrayList list = new ArrayList();
list.Add("張三");    // string → object(裝箱)
list.Add(10);        // int → object(裝箱)
list.Add(2.2);       // double → object(裝箱)
// 訪問時需手動拆箱,可能引發(fā)InvalidCastException
int num = (int)list[1]; // 拆箱
方案裝箱開銷類型安全性能(相對)
List<object>
List<dynamic>
自定義類 / 結構體
Dictionary<string, object>
ExpandoObject中低
ArrayList

到此這篇關于c#將不同類型的數(shù)據(jù)存儲到一起的實現(xiàn)的文章就介紹到這了,更多相關c#不同類型數(shù)據(jù)存儲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • C#中的那些警告該如何去除(完全去除C#警告)

    C#中的那些警告該如何去除(完全去除C#警告)

    C#(英文名為 CSharp)是微軟開發(fā)的一種面向對象的編程語言,下面這篇文章主要給大家介紹了關于C#中的那些警告該如何去除的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • C#實現(xiàn)彈窗提示輸入密碼

    C#實現(xiàn)彈窗提示輸入密碼

    這篇文章主要為大家詳細介紹了C#實現(xiàn)彈窗提示輸入密碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C#中設置textbox限制條件的方法

    C#中設置textbox限制條件的方法

    這篇文章主要介紹了C#中設置textbox限制條件的方法,可實現(xiàn)設置像數(shù)量、價格、金額等的textbox的限制條件,用戶只能輸入數(shù)字或小數(shù),是非常實用的技巧,需要的朋友可以參考下
    2014-12-12
  • c# Invoke和BeginInvoke 區(qū)別分析

    c# Invoke和BeginInvoke 區(qū)別分析

    這篇文章主要介紹了c# Invoke和BeginInvoke 區(qū)別分析,需要的朋友可以參考下
    2014-10-10
  • 利用C#實現(xiàn)AOP常見的幾種方法詳解

    利用C#實現(xiàn)AOP常見的幾種方法詳解

    AOP面向切面編程(Aspect Oriented Programming),是通過預編譯方式和運行期動態(tài)代理實現(xiàn)程序功能的統(tǒng)一維護的一種技術。下面這篇文章主要給大家介紹了關于利用C#實現(xiàn)AOP常見的幾種方法,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09
  • C# 生成JWT的示例代碼

    C# 生成JWT的示例代碼

    這篇文章主要介紹了C# 生成JWT的示例代碼,需要的朋友可以參考下
    2009-04-04
  • C#8 的模式匹配實現(xiàn)

    C#8 的模式匹配實現(xiàn)

    這篇文章主要介紹了C#8 的模式匹配實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • C# SendInput 模擬鼠標操作的實現(xiàn)方法

    C# SendInput 模擬鼠標操作的實現(xiàn)方法

    C# SendInput 模擬鼠標操作的實現(xiàn)方法,需要的朋友可以參考一下
    2013-04-04
  • C#分布式事務的超時處理實例分析

    C#分布式事務的超時處理實例分析

    這篇文章主要介紹了C#分布式事務的超時處理,以實例形式較為詳細的分析了C#分布式事務的超時處理相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • c# asp .net 動態(tài)創(chuàng)建sql數(shù)據(jù)庫表的方法

    c# asp .net 動態(tài)創(chuàng)建sql數(shù)據(jù)庫表的方法

    c# asp .net 動態(tài)創(chuàng)建sql數(shù)據(jù)庫表的方法,需要的朋友可以參考一下
    2013-04-04

最新評論

靖边县| 榆树市| 临颍县| 大同县| 班戈县| 德昌县| 卢氏县| 集安市| 合阳县| 奈曼旗| 清徐县| 张家港市| 会理县| 渝北区| 澄江县| 延庆县| 祁连县| 旬阳县| 连州市| 西城区| 睢宁县| 岗巴县| 太康县| 类乌齐县| 汝城县| 锦屏县| 栖霞市| 泾源县| 沈丘县| 五台县| 甘南县| 噶尔县| 江城| 凌海市| 尉犁县| 抚远县| 聂荣县| 宁津县| 高唐县| 平度市| 太仆寺旗|