创建一个 int 和 DateTime 列表
Posted
技术标签:
【中文标题】创建一个 int 和 DateTime 列表【英文标题】:Create a List of int & DateTime 【发布时间】:2012-02-02 12:21:11 【问题描述】:我想创建一个这样的列表:
List<int, DateTime> foo = new List<int, DateTime>();
但我收到此错误:
Using the generic type 'System.Collections.Generic.List<T>' requires 1 type arguments
在 C# 中可以做到这一点吗?
【问题讨论】:
这没有任何意义。你需要一门课。List<T>
只能是 one 类型。你想创建一个Dictionary<TKey, TValue>吗?
在java中可以使用HashMap
不是字典,我想给每个 DateTime 一个 ID。
@OpenMind: ***.com/questions/1273139/…
【参考方案1】:
你可以有一个int/DateTime Tuples的列表。
var foo = new List<Tuple<int, DateTime>>();
这确实需要 .Net 4.0+。
我个人更喜欢创建一个简单的类并将其用于我的列表。我认为它比嵌套泛型更具可读性。
// I don't know your domain so the example is with names I'd hate to actually see
class MyType
public int MyInteger get; set;
public DateTime MyDateTime get; set;
也可以使用dynamic
并发送一个匿名类型。
var foo = new List<dynamic>();
foo.Add(new X = 0, D = DateTime.Now);
foreach(var d in foo)
Console.WriteLine(d);
【讨论】:
【参考方案2】:如果您使用的是 .NET 4.0 或更高版本,则可以使用 List<Tuple<int,DateTime>>
。
另一种方法是创建一个用作泛型类型的简单类 - 这样做的好处是可读性(为类型和属性提供描述性名称)。
List<MyType> myList = new List<MyType>();
class MyType
public int TheInt get; set;
public DateTime TheDateTime get; set;
【讨论】:
【参考方案3】:列表只能包含一种类型。你可以在这里做两件事:
创建一个元组列表
List<Tuple<int,DateTime>>
使用字典
Dictionary<int, DateTime>
【讨论】:
【参考方案4】:List<T>
类型只接受一个泛型类型参数,但您提供了两个。如果要在每个插槽中存储两个值,则需要使用可以包含这两个值的包装器类型。例如
class Storage
public int IntValue get; set;
public DateTime DateValue get; set;
List<Storage> list = ...;
如果您不想创建自定义类型,也可以使用Tuple<int, DateTime>
【讨论】:
【参考方案5】:这取决于你想做什么。
例如,如果您想使用 int 作为索引来访问 DateTime,您可以使用 Dictionary,如下所示:
Dictionary<int, DateTime> dict = new Dictionary<int, DateTime>();
dict.Add(1, DateTime.Now);
DateTime d = dict[1];
或者,如果您想存储任意值列表并允许重复,您可以使用:
var values = new List<Tuple<int, DateTime>>();
values.Add(new Tuple<int, DateTime>(1, DateTime.Now));
Tuple<int, DateTime> value = values.First();
【讨论】:
【参考方案6】:它是带有一个泛型类型参数的 List<T>
,而不是 List<T, K>
。也许您想改用Dictionary<TKey, TValue>
?
【讨论】:
【参考方案7】:为什么不创建一个封装这两个属性的类?
public class Foo
public int ID set;get;
public DateTime CreatedDate set;get;
然后您可以创建该类的列表
List<Foo> objFooList=new List<Foo>();
【讨论】:
【参考方案8】:您可以使用Tuple<int, DateTime>
或KeyValuePair<int, DateTime>
来实现此目的,收集在List<T>
中。您收到错误是因为 List<T>
包含一个通用参数,因为它存储了一个元素集合(它们都是一种基本类型)。
【讨论】:
以上是关于创建一个 int 和 DateTime 列表的主要内容,如果未能解决你的问题,请参考以下文章
存储和排序同时具有 DateTime 和 Int 值的人员列表
创建 SQL 表,其中 DATETIME 或 INT 上的空字符串不默认