繁体   English   中英

字典中的C#动态TValue

[英]C# Dynamic TValue in Dictionary

这个问题可能有点长,但是请继续阅读:

我有一组正在运行的存储过程,它们的所有数据都存储在字典中。

例如,getEventTypes存储在eventTypeResult字典中,而getEventCats存储在字典式eventCatResult中。

是否可以动态运行以下行:

Dictionary<string, eventTypeResult> resultsList = (Dictionary<string, eventTypeResult>)resultsObject;

哪里可能看起来像这样:

var resultType = eventTypeResult;

Dictionary<string, resultType > resultsList = (Dictionary<string, resultType >)resultsObject;

谢谢你的帮助。

编辑:尝试2解释为什么它需要动态

目前,我的代码如下所示:

if (resultType == "eventTypeResult")
{
    Dictionary<string, eventTypeResult> resultsList = (Dictionary<string, eventTypeResult>)resultsObject;
}
else if (resultType == "eventDateResult")
{
    Dictionary<string, eventDateResult> resultsList = (Dictionary<string, eventDateResult>)resultsObject;
}
else if
else if
else if
ect
ect

可能不只是这样:

var resultType = eventTypeResult;

Dictionary<string, resultType > resultsList = (Dictionary<string, resultType >)resultsObject;

在强类型语言中,“动态”可能不是最好的方法...您试图创建的是一个任意名称值集合,例如.Net Framework中的各种缓存类型。 您需要中继一个可以容纳所有结果类型的通用类型。

如果您拥有类似resultType类的类型,而其余所有结果类型都继承自该类型,请使用它: Dictionary<string, resultType > 只要它是resultType子类 ,就可以将所需的值放在值中。 如果不这样做,则使用Dictionary<string, object >

如果需要在字典之间进行转换,则可以始终执行(对象实际类型必须匹配):

var thing = new Dictionery<int> ()
var objectThing = thing.Cast<Dictionery<object>();

如果要动态,可以:

Dictionary<string, resultType > dict;
dyamic value = dict["something"];
value.WhaterverYouWant() // if this method doesnt exist this will compile but crash at runtime...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM