【发布时间】:2011-02-18 14:33:00
【问题描述】:
给定:
public struct Id
{
readonly int m_id;
public Id(int id)
{ m_id = id; }
public static implicit operator int(Id id)
{ return id.m_id; }
public static implicit operator Id(int id)
{ return new Id(id); }
}
你能隐式转换一个
IEnumerable<int>
到
IEnumerable<Id>
反之亦然。某种程度上来说。请注意,
var ids = new int[]{ 1, 2 };
ids.Cast<Id>();
在这种情况下似乎不起作用,协方差似乎也不起作用。当然,选择会起作用,即:
ids.Select(id => new Id(id));
但我正在寻找可以隐式完成这项工作的东西,所以写:
IEnumerable<Id> ids = new int[]{ 1, 2 };
是的,我知道这可以写成:
IEnumerable<Id> ids = new Id[]{ 1, 2 };
但问题在于 int 的可枚举来自不同的来源,例如文件。
如果已经有答案,我很抱歉,但我找不到。
【问题讨论】:
标签: c#-4.0 ienumerable implicit-conversion