Enumerable.Empty<T> 需要显式转换
Explicit cast required for Enumerable.Empty<T>
到目前为止我读过的每个示例(google result/stack 问题)解释了 "Enumerable.Empty" 的使用,都说我应该能够将它与数组一起使用。然而,VS 编译器不允许我使用它,除非我明确地将它转换为数组,尽管定义了类型。
这是为什么? (我在 ~20 个相关的堆栈问题或我看过的一般 google 结果中没有看到需要转换的参考)
//The internet says this should work, but i get a "Cannot implicitly convert type" error
public byte[] dataA = Enumerable.Empty<byte>();
public string[] dataB = Enumerable.Empty<string>();
//Throws no error, but the cast's requirement is never mentioned
public byte[] dataA = (byte[])Enumerable.Empty<byte>();
public string[] dataB = (string[])Enumerable.Empty<string>();
Enumerable.Empty
生成空序列,而不是数组。
如果你想把序列转换成数组那么你可以调用ToArray
:
byte[] dataA = Enumerable.Empty<byte>().ToArray();
string[] dataB = Enumerable.Empty<string>().ToArray();
如果你真的想要一个空数组那么为什么不说:
byte[] dataA = new byte[0];
string[] dataB = new string[0];
您的转换可能有效,但这在很大程度上取决于 Empty
的实施方式。它可能只是 return 一个空数组,或者它可能 return 实现了 IEnumerable
但为空的其他东西。
你的意思是 Array.Empty<T>
,不是可枚举的:
public byte[] dataA = Array.Empty<byte>();
public string[] dataB = Array.Empty<string>();
您可以使用 ToArray()
Linq 方法从 IEnumerable<T>
中获取 Array<T>
。因此,如前所述,您 可以 使用 Enumerable.Empty<T>
创建一个空序列,然后将其转换为数组。
请注意,如果您明确需要一个空数组,通常静态 Array<T>.Empty
是 recommended way 来创建一个空数组。
如果可以,请避免这些强制转换 (byte[])
,它们将来可能会咬你一口。实际上根本不需要。
到目前为止我读过的每个示例(google result/stack 问题)解释了 "Enumerable.Empty" 的使用,都说我应该能够将它与数组一起使用。然而,VS 编译器不允许我使用它,除非我明确地将它转换为数组,尽管定义了类型。
这是为什么? (我在 ~20 个相关的堆栈问题或我看过的一般 google 结果中没有看到需要转换的参考)
//The internet says this should work, but i get a "Cannot implicitly convert type" error
public byte[] dataA = Enumerable.Empty<byte>();
public string[] dataB = Enumerable.Empty<string>();
//Throws no error, but the cast's requirement is never mentioned
public byte[] dataA = (byte[])Enumerable.Empty<byte>();
public string[] dataB = (string[])Enumerable.Empty<string>();
Enumerable.Empty
生成空序列,而不是数组。
如果你想把序列转换成数组那么你可以调用ToArray
:
byte[] dataA = Enumerable.Empty<byte>().ToArray();
string[] dataB = Enumerable.Empty<string>().ToArray();
如果你真的想要一个空数组那么为什么不说:
byte[] dataA = new byte[0];
string[] dataB = new string[0];
您的转换可能有效,但这在很大程度上取决于 Empty
的实施方式。它可能只是 return 一个空数组,或者它可能 return 实现了 IEnumerable
但为空的其他东西。
你的意思是 Array.Empty<T>
,不是可枚举的:
public byte[] dataA = Array.Empty<byte>();
public string[] dataB = Array.Empty<string>();
您可以使用
ToArray()
Linq 方法从IEnumerable<T>
中获取Array<T>
。因此,如前所述,您 可以 使用Enumerable.Empty<T>
创建一个空序列,然后将其转换为数组。请注意,如果您明确需要一个空数组,通常静态
Array<T>.Empty
是 recommended way 来创建一个空数组。如果可以,请避免这些强制转换
(byte[])
,它们将来可能会咬你一口。实际上根本不需要。