我正在尝试将字符串集合类型转换为包含各种类型的键和值的字典(大多数情况下,该值将是一个结构。字符串集合中的每个字符串都将包含第一个元素中的键和其余部分字符串将包含结构元素(字典的值),当然字符串将包含结构中每个元素的正确类型,我们只需要解码结构元素的类型......我试图这样做,但我遇到了死胡同,没有可能......我试图用谷歌搜索它,但我的案例很难,因为它应该与我的程序中的很多案例相匹配......这就是我试图做的
private static void LoadDictionaryFromString<TKey,TValue>(ref IDictionary<TKey,TValue> argetDict,StringCollection SourceString)
{
TargetDict.Clear();
foreach(string strData in SourceString)
{
string[] strElements = strData.Split(';');
int m = 1;
// i must initialize
object Key = new object(); // when i try => TKey Key = new TKey() it's not working
object Value = new object(); // the same like previous line...
foreach (var field in typeof(TValue).GetFields())
{
// I can't work this out.... i stuck here
// in this line i'm getting an exception -> out of index...
TypeDescriptor.GetProperties(TargetDict.Values)[m].SetValue(Value , strElements[m]);
}
TypeDescriptor.GetProperties(TargetDict.Keys)[0].SetValue(Key, strElements[0]);
TargetDict.Add((TKey)Key,(TValue)Value);
}
}
我希望有人可以帮助我解决这个问题,因为我在这方面遇到了很多困难。
谢谢
我正在为字符串集合的输入添加一个示例,字符串集合之前已经从同一个字典中保存过,所以假设当前字典包含这样的键和值:,键是样本结构包含的 OrderID田野:
struct sampleStruct
{
string StockName;
int Quantity;
int StockType;
enum_Status StockStatus; // the declaration: enum enum_Status { Accepted, Cancel, Executed }
double Price;
DateTime TradeTime;
}
现在假设我们有两个包含值的记录:
OrderID = 155 (for the key part) and for the struct : Apple , 200, 1, Accepted, 250, 12/05/2013 10:00:00
OrderID = 156 (for the key part) and for the struct : IBM, 105, 1, Executed, 200, 12/05/2013 12:34:10
所以保存的字符串集合将是名称 StringCollection strCollection;
"155;Apple;200;1;Accepted;250;12/05/2013 10:00:00
156;IBM;105;1;Executed;200;12/05/2013 12:34:10"
现在,过了一会儿,我从上面的类型中保存了一个字符串集合,我知道它包含上面指定的结构,所以我像这样运行函数:
IDictionary<int, sampleStruct> DictToTarget=new IDictionary<int, sampleStruct>();
// the Dictionary will be cleared and will contain the data as saved in the string collection
// the stringCollection will contain the data above
LoadDictionaryFromString<int, sampleStruct>(ref DictToTarget, strCollection);
我希望有足够的数据来帮助我。再次感谢。