C# 如何使方法返回IEnumerable<;T>;从阵列?
我有一个如下的方法。我需要将值存储在数组中,并将其作为IEnumerable返回,而不是C# 如何使方法返回IEnumerable<;T>;从阵列?,c#,C#,我有一个如下的方法。我需要将值存储在数组中,并将其作为IEnumerable返回,而不是yield return。我怎样才能做到这一点?。谢谢你的帮助 public static IEnumerable<UserData> DetailsFactory { get { yield return new UserData( "Jim",
yield return
。我怎样才能做到这一点?。谢谢你的帮助
public static IEnumerable<UserData> DetailsFactory
{
get
{
yield return new UserData(
"Jim",
"Parker",
"Sheryl")
.SetName("User-1 Address details") as UserData;
}
}
公共静态IEnumerable Details工厂
{
收到
{
返回新的用户数据(
“吉姆”,
“帕克”,
“谢丽尔”)
.SetName(“用户1地址详细信息”)作为用户数据;
}
}
AT[]
已经是一个IEnumerable
。因此,您可以直接返回数组:
return new[] {
new UserData(
"Jim",
"Parker",
"Sheryl")
.SetName("User-1 Address details")
}
T[]
已经是一个IEnumerable
。因此,您可以直接返回数组:
return new[] {
new UserData(
"Jim",
"Parker",
"Sheryl")
.SetName("User-1 Address details")
}
只需返回阵列为什么使用
yield
?没有什么可以列举的。只需返回新[]{…}
。仅供参考,此代码无效,无法编译。只有在属性中才能有任何get{}
方法。@Fabjan这是一个属性。@ReneéVogt是的,但是属性中的yield return
非常奇怪…只需返回数组为什么使用yield
?没有什么可以列举的。只需返回新[]{…}
。仅供参考,此代码无效,无法编译。只有在属性中才能有任何get{}
方法。@Fabjan这是一个属性。@RenéVogt是的,但是属性中的yield return
非常奇怪……旁注:是的,有人可以将结果转换到UserData[]
并修改它,但在我看来,试图阻止人们做那些不一定能奏效的蠢事是徒劳的。即使将数组包装到另一个IEnumerable
中,也可以使用反射来获取原始数组。对于不关心类型系统所带来的限制的对手,没有任何方法可以愚弄API。如果希望避免这种情况,可以将数组包装在ReadOnlyCollection
中(但是这不能回答问题,您的回答非常好;-)。我认为您无法从ReadOnlyCollection
获取原始数组(不过,我可能错了)。。。然后,您可以始终从任何可枚举项重构数组(在新数组上):-)@Jcl:IfReadOnlyCollection
复制在原始数组中无法获取的项,但仅复制它们。然后你可以通过反射来获得它。我认为类型系统的正常保护是好的。试图防御敌对的开发人员IMHO没有多大用处。我没有见过ReadOnlyCollection
的实现,但最肯定的是,是的。关于评论的其余部分:100%同意:-)旁注:是的,有人可以将结果投射到UserData[]
并对其进行修改,但在我看来,试图阻止人们做愚蠢的事情是徒劳的。即使将数组包装到另一个IEnumerable
中,也可以使用反射来获取原始数组。对于不关心类型系统所带来的限制的对手,没有任何方法可以愚弄API。如果希望避免这种情况,可以将数组包装在ReadOnlyCollection
中(但是这不能回答问题,您的回答非常好;-)。我认为您无法从ReadOnlyCollection
获取原始数组(不过,我可能错了)。。。然后,您可以始终从任何可枚举项重构数组(在新数组上):-)@Jcl:IfReadOnlyCollection
复制在原始数组中无法获取的项,但仅复制它们。然后你可以通过反射来获得它。我认为类型系统的正常保护是好的。试图防御敌对的开发人员IMHO没有多大用处。我没有见过ReadOnlyCollection
的实现,但最肯定的是,是的。关于其余的评论:100%同意:-)