Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从C#.NET中的类型化私有变量中公开IEnumerable的IEnumerable_C#_Collections_Ienumerable - Fatal编程技术网

如何从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...