C#哈希表访问类型object的值

C#哈希表访问类型object的值,c#,hash,types,casting,runtime,C#,Hash,Types,Casting,Runtime,我有一个键值对为的哈希表 (Int,new Timespan())我正在尝试修改该值 通过 但是,它在运行时只返回TimeSpan对象,不会编译,所以我尝试了 DateTime total = date.Add(Convert.ChangeType(table[getInt()], typeof(TimeSpan))); 这也没用,关于访问哈希表中的对象有什么想法吗 首先,您应该使用泛型。然后,您的表变量将变为: var table = new Dictionary<int, Time

我有一个键值对为的哈希表
(Int,new Timespan())
我正在尝试修改该值 通过

但是,它在运行时只返回TimeSpan对象,不会编译,所以我尝试了

 DateTime total = date.Add(Convert.ChangeType(table[getInt()], typeof(TimeSpan)));

这也没用,关于访问哈希表中的对象有什么想法吗

首先,您应该使用泛型。然后,您的
变量将变为:

var table = new Dictionary<int, TimeSpan>();
在您使用
哈希表的情况下
只需转换返回的值:

DateTime total = date.Add((TimeSpan)table[getInt()]);

首先,你应该使用泛型。然后,您的
变量将变为:

var table = new Dictionary<int, TimeSpan>();
在您使用
哈希表的情况下
只需转换返回的值:

DateTime total = date.Add((TimeSpan)table[getInt()]);

首先,你应该使用泛型。然后,您的
变量将变为:

var table = new Dictionary<int, TimeSpan>();
在您使用
哈希表的情况下
只需转换返回的值:

DateTime total = date.Add((TimeSpan)table[getInt()]);

首先,你应该使用泛型。然后,您的
变量将变为:

var table = new Dictionary<int, TimeSpan>();
在您使用
哈希表的情况下
只需转换返回的值:

DateTime total = date.Add((TimeSpan)table[getInt()]);

你需要一个演员。但是,不要这样做。相反,使用泛型(
Dictionary
)使用Convert创建不同类型的新对象,使用更改表达式的类型(对象将是相同的,除非它确实是类型转换),例如对象->时间跨度-当然,如果表达式不真正表示时间跨度,这将是一个运行时错误。您需要强制转换。但是,不要这样做。相反,使用泛型(
Dictionary
)使用Convert创建不同类型的新对象,使用更改表达式的类型(对象将是相同的,除非它确实是类型转换),例如对象->时间跨度-当然,如果表达式不真正表示时间跨度,这将是一个运行时错误。您需要强制转换。但是,不要这样做。相反,使用泛型(
Dictionary
)使用Convert创建不同类型的新对象,使用更改表达式的类型(对象将是相同的,除非它确实是类型转换),例如对象->时间跨度-当然,如果表达式不真正表示时间跨度,这将是一个运行时错误。您需要强制转换。但是,不要这样做。相反,使用泛型(
Dictionary
)使用Convert创建不同类型的新对象,使用更改表达式的类型(对象将是相同的,除非它确实是类型转换),例如对象->时间跨度-当然,如果表达式不真正表示时间跨度,这将是一个运行时错误。感谢您的双重回答,在这种情况下使用泛型有什么好处?@bischoffingston在编译时可以保证对这项任务的某些操作。如果您不小心将字符串(而不是时间跨度)放入哈希表中,则转换将在运行时失败,并出现错误。哎呀!(但使用通用字典可以防止这种错误——无论是在插入还是检索上。)@bischoffingston除了类型安全之外,还有另一个优点:不必键入
date.Add((TimeSpan)table[getInt()])
,您可以少键入10个字符:
date.Add(table[getInt()])
。更有用的是,哈希表需要装箱和取消装箱timespan,因为它是一种值类型。这对性能的影响很小。有了泛型字典,就没有装箱了。谢谢你的双重回答,在这种情况下使用泛型有什么好处?@bischoffingston在编译时可以保证完成一些任务。如果您不小心将字符串(而不是时间跨度)放入哈希表中,则转换将在运行时失败,并出现错误。哎呀!(但使用通用字典可以防止这种错误——无论是在插入还是检索上。)@bischoffingston除了类型安全之外,还有另一个优点:不必键入
date.Add((TimeSpan)table[getInt()])
,您可以少键入10个字符:
date.Add(table[getInt()])
。更有用的是,哈希表需要装箱和取消装箱timespan,因为它是一种值类型。这对性能的影响很小。有了泛型字典,就没有装箱了。谢谢你的双重回答,在这种情况下使用泛型有什么好处?@bischoffingston在编译时可以保证完成一些任务。如果您不小心将字符串(而不是时间跨度)放入哈希表中,则转换将在运行时失败,并出现错误。哎呀!(但使用通用字典可以防止这种错误——无论是在插入还是检索上。)@bischoffingston除了类型安全之外,还有另一个优点:不必键入
date.Add((TimeSpan)table[getInt()])
,您可以少键入10个字符:
date.Add(table[getInt()])
。更有用的是,哈希表需要装箱和取消装箱timespan,因为它是一种值类型。这对性能的影响很小。有了泛型字典,就没有装箱了。谢谢你的双重回答,在这种情况下使用泛型有什么好处?@bischoffingston在编译时可以保证完成一些任务。如果您不小心将字符串(而不是时间跨度)放入哈希表中,则转换将在运行时失败,并出现错误。哎呀!(但使用通用字典可以防止这种错误——无论是在插入还是检索上。)@bischoffingston除了类型安全之外,还有另一个优点:不必键入
date.Add((TimeSpan)table[getInt()])
,您可以少键入10个字符:
date.Add(table[getInt()])
。更有用的是,哈希表需要装箱和取消装箱timespan,因为它是一种值类型。这对性能的影响很小。有了通用字典,就没有装箱了。