提问人:markzzz 提问时间:7/4/2011 最后编辑:Kirill Polishchukmarkzzz 更新时间:6/12/2023 访问量:308220
在 C 中初始化 IEnumerable<string>#
Initializing IEnumerable<string> In C#
问:
我有这个对象:
IEnumerable<string> m_oEnum = null;
我想初始化它。尝试过
IEnumerable<string> m_oEnum = new IEnumerable<string>() { "1", "2", "3"};
但它说“IEnumerable 不包含添加字符串的方法。有什么想法吗?谢谢
答:
122赞
Bas
7/4/2011
#1
IEnumerable<T>
是一个接口。您需要从具体类型(实现)开始。例:IEnumerable<T>
IEnumerable<string> m_oEnum = new List<string>() { "1", "2", "3"};
7赞
BonyT
7/4/2011
#2
不能实例化接口 - 必须提供 IEnumerable 的具体实现。
评论
0赞
Mark Schultheiss
10/10/2022
感觉更像是评论,而不是所说的答案。
39赞
Bob Vale
7/4/2011
#3
如实现 IEnumerablestring[]
IEnumerable<string> m_oEnum = new string[] {"1","2","3"}
23赞
ChrisF
7/4/2011
#4
IEnumerable
只是一个接口,因此不能直接实例化。
您需要创建一个具体的类(例如List
)
IEnumerable<string> m_oEnum = new List<string>() { "1", "2", "3" };
然后,您可以将其传递给任何需要 .IEnumerable
251赞
sehe
7/4/2011
#5
好的,补充您可能也在寻找的答案
IEnumerable<string> m_oEnum = Enumerable.Empty<string>();
或
IEnumerable<string> m_oEnum = new string[]{};
评论
4赞
Joel Coehoorn
10/5/2018
现在老了,但我会避免第二种选择。您可能希望它与与数组不兼容的其他 IEnumerable 进行交互。
1赞
Carlo Bos
11/16/2021
有时需要将其强制转换为 IEnumerable。那么像这样的语句就可以了:(IEnumerable<string>)new [] {"1", "2", "3"}
19赞
Kirill Polishchuk
7/4/2011
#6
public static IEnumerable<string> GetData()
{
yield return "1";
yield return "2";
yield return "3";
}
IEnumerable<string> m_oEnum = GetData();
评论
13赞
Adriano Carneiro
7/4/2011
虽然有点矫枉过正,但使用产量+1
5赞
5argon
2/13/2018
@AdrianCarneiro +1 押韵
5赞
yan yankelevich
10/5/2018
#7
您可以创建一个静态方法,该方法将返回所需的 IEnumerable,如下所示:
public static IEnumerable<T> CreateEnumerable<T>(params T[] values) =>
values;
//And then use it
IEnumerable<string> myStrings = CreateEnumerable("first item", "second item");//etc..
或者,只需执行以下操作:
IEnumerable<string> myStrings = new []{ "first item", "second item"};
8赞
Alexander Oh
8/12/2020
#8
IEnumerable 是一个接口,而不是寻找如何创建接口实例,而是创建与接口匹配的实现:创建列表或数组。
IEnumerable<string> myStrings = new [] { "first item", "second item" };
IEnumerable<string> myStrings = new List<string> { "first item", "second item" };
评论
0赞
tobbenb3
7/14/2022
最简单的:new[] {...}
0赞
Adnan
6/12/2023
#9
这是通过使用 new in 中实现此目的的方法。global using
c# 10
// this makes EnumerableHelpers static members accessible
// from anywhere inside your project.
// you can keep this line in the same file as the helper class,
// or move it to your custom global using file.
global using static Utils.EnumerableHelpers;
namespace Utils;
public static class EnumerableHelpers
{
/// <summary>
/// Returns only non-null values from passed parameters as <see cref="IEnumerable{T}"/>.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="values"></param>
/// <returns><see cref="IEnumerable{T}"/> of non-null values.</returns>
public static IEnumerable<T> NewEnumerable<T>(params T[] values)
{
if (values == null || values.Length == 0) yield break;
foreach (var item in values)
{
// I added this condition for my use case, remove it if you want.
if (item != null) yield return item;
}
}
}
以下是如何使用它:
// Use Case 1
var numbers = NewEnumerable(1, 2, 3);
// Use Case 2
var strings = NewEnumerable<string>();
strings.Append("Hi!");
评论