如何从C#.NET中的类型化私有变量中公开IEnumerable的IEnumerable
这可能是个愚蠢的问题,但是 是否可以表示:如何从C#.NET中的类型化私有变量中公开IEnumerable的IEnumerable,c#,collections,ienumerable,C#,Collections,Ienumerable,这可能是个愚蠢的问题,但是 是否可以表示: private Dictionary<decimal, List<string>> _internal; private Dictionary\u internal; 作为 public IEnumerable External=>某物。我不知道。。。 通常我只使用.AsEnumerable(),但这显然只返回字典的IEnumerable 如果这是可能的,我将如何通过在一行中指定IEnumerable的两个过滤器(.Whe
private Dictionary<decimal, List<string>> _internal;
private Dictionary\u internal;
作为
public IEnumerable External=>某物。我不知道。。。
通常我只使用.AsEnumerable(),但这显然只返回字典的IEnumerable
如果这是可能的,我将如何通过在一行中指定IEnumerable的两个过滤器(.Where())来调用此公共变量,以便过滤结果是这两个过滤器的结果
我希望这是有意义的。您不能直接公开值(不进行某种转换)。您可能会认为,既然
字典
是一个IEnumerable
,而列表
是一个IEnumerable
,那么这应该是很简单的。不幸的是,它不是KeyValuePair
而不是KeyValuePair
,因为类(在本例中是结构)是不变的
你有几个选择,但它们都会涉及到一些源的投影。第一种方法是简单地选择一个新的可枚举项,手动转换KeyValuePair
:
private Dictionary\u internal=new();
公共可数外部
=>\u内部。选择(
c=>newkeyvaluepair(c.Key,c.Value));
第二种选择是设计一本新词典:
private Dictionary\u internal=new();
公共可数外部
=>_internal.ToDictionary(c=>c.Key,c=>(IEnumerable)c.Value);
我不会走这条路,因为它将不必要地分配,并且必须重新计算散列,等等。但我还是想把它说出来
第三个选项是自定义迭代器方法:
private Dictionary\u internal=new();
公共IEnumerable外部(){
foreach(内部的var(键、值)
返回新的KeyValuePair(键,值);
}
或者,您可以将转换迭代器方法设置为私有,然后使用另一个属性调用它(如果您希望通过属性语法实现外部使用):
private Dictionary\u internal=new();
私有IEnumerable迭代器(){
foreach(内部的var(键、值)
返回新的KeyValuePair(键,值);
}
public IEnumerable External=>Iterator();
看看这四个都在行动的例子。你能告诉我们在哪里我们可以理解你想要实现的目标吗?这是,但你想这样做似乎很奇怪。如果我理解正确,你想要的是类似的东西吗?
public IEnumerable<KeyValuePair<decimal, IEnumerable<string>>> External => something.idontknow...