在方法调用中,对象正在传递它。
从这个对象我可以得到两件事:ItemData
属性和Row
属性,例如:
oPTL.ItemData, oPTL.Row
我希望有一个数据结构,每次调用此方法时,它都可以更新此数据结构,例如,一次oPTL.ItemData
为"Spread1"
,oPTL.Row
为{{1}所以我们应该能够保存2
具有值Spread1
...下一次调用例如我们应该能够保存“Spread3”具有值3..next调用“Spread1”具有ALSO值等等...
所以它就像2
但我仍然有问题在代码中以这种方式声明和使用它,你可以帮助我的任何代码示例吗?
答案 0 :(得分:2)
您要找的是Dictionary<string, List<int>>
- 假设您的.ItemData
和.Row
属性实际上分别为string
和int
。
当您阅读带有“Spread1”值的项目时,首先通过调用.ContainsKey(string)
方法检查字典中是否已存在此类密钥。如果是,则添加新的Row
值 - 如果没有,则使用全新列表创建新密钥,如下例所示:
var myItems = new Dictionary<string, List<int>>();
// ...
if (myItems.ContainsKey(newItem.ItemData))
{
// myItems[newItem.ItemData] actually contains List<int> we created at some
// point in the other part of if-else.
// The .Add method we call here belongs to List
List<int> itemValues = myItems[newItem.ItemData];
itemValues.Add(newItem.Row);
}
else
{
myItems.Add(newItem.ItemData, new List<int> { newItem.Row });
}
已编辑以使用两种.Add
方法添加说明。
答案 1 :(得分:2)
您可以使用值为列表的字典:
IDictionary<string, List<int>> rows = new Dictionary<string, List<int>>();
要填充它,您可以使用此扩展方法:
public static class DictionaryDefaultExtension
{
public static TValue GetOrDefault<TKey, TValue>(
this IDictionary<TKey, TValue> dictionary,
TKey key,
Func<TValue> defaultValue)
{
TValue result;
if (dictionary.TryGetValue(key, out result))
{
return result;
}
else
{
TValue value = defaultValue();
dictionary[key] = value;
return value;
}
}
}
像这样使用:
d.GetOrDefault(oPTL.ItemData, () => new List<int>()).Add(oPTL.Row);