如果我想初始化分组列表,我可以内联吗?
使用上下文进行更新
我已经知道我无法初始化接口,但是dotnet内置了一个实现吗?
我不想创建自己的实现,因为我试图将现有的私有方法重构为它自己的公共类,因此我需要传入参数进行单元测试。
void MyMethod(IList<IGrouping<int, MyObject>> objGroupings)
目前我已经使用初始化列表,然后按键分组:
var fooList = new List<MyObject>
{
new MyObject{ foo = 5 },
new MyObject{ foo = 5 },
new MyObject{ foo = 5 },
new MyObject{ foo = 2 },
new MyObject{ foo = 2 }
};
var fooGrouping = fooList.GroupBy(o => o.foo).ToList();
答案 0 :(得分:7)
IGrouping
只是一个界面,无法初始化。如果要使用内联初始化,则需要初始化实现IGrouping
答案 1 :(得分:3)
我同意@David Pilkington的回答。这是我过去为此目的编写/使用的课程:
sealed class Grouping<TKey, TElement> : IGrouping<TKey, TElement>
{
private readonly TKey m_key;
private readonly IEnumerable<TElement> m_elements;
public Grouping(TKey key, IEnumerable<TElement> elements)
{
if (elements == null)
throw new ArgumentNullException("elements");
m_key = key;
m_elements = elements;
}
public TKey Key
{
get { return m_key; }
}
public IEnumerator<TElement> GetEnumerator()
{
return m_elements.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
答案 2 :(得分:-2)
您可以改为初始化词典:
var dic = new Dictionary<string, int>()
{
{ "foo", 1 },
{ "bar", 2 },
};
如果您关注具有相同键的多个值,请使用列表或值的字典(选择对您的代码更有效的列表类型)