问题
I was using LinqPad to test out some Enum functions and I didn't get integers like I expected when I used .Dump(). Why did the ToList() solve the problem?
void Main()
{
Enum.GetValues(typeof(Options)).Cast<int>().Dump();
Enum.GetValues(typeof(Options)).Cast<int>().ToList().Dump();
}
public enum Options
{
Equal,
LessThan,
GreaterThan
}
回答1:
Actually, LINQPad is not the culprit here. This is because of an optimization in Enumerable.Cast:
public static IEnumerable<TResult> Cast<TResult>(this IEnumerable source) {
IEnumerable<TResult> typedSource = source as IEnumerable<TResult>;
if (typedSource != null) return typedSource;
if (source == null) throw Error.ArgumentNull("source");
return CastIterator<TResult>(source);
}
As you can see, if source
implements IEnumerable<TResult>
, then Cast
just returns the source unchanged. In this case, source
is of type Option[]
, which happens to implement IEnumerable<int>
, so Cast
returns an array of Option
, and LINQPad dumps it.
I must admit that it came as a surprise that Option[]
can be cast to IEnumerable<int>
, but it seems to be the case...
来源:https://stackoverflow.com/questions/23276970/why-does-linqpad-dump-enum-integer-values-as-strings