gpt4 book ai didi

c# - 如果返回类型是可枚举的,返回列表是否错误

转载 作者:可可西里 更新时间:2023-11-01 08:00:10 25 4
gpt4 key购买 nike

我经常遇到想要返回 Enumerable<T> 的情况来自方法或属性。打造回归Enumerable<T> , 我用 List<T> -实例。填写列表后,我返回列表。

我一直以为这样就够了。但是存在调用者转换结果 Enumerable<T> 的可能性。回到List<T>并开始进一步使用它。如果稍后我更改方法的实现,调用者的代码将失败。为避免这种情况,我可以在将列表返回给调用者之前返回 list.ToArray 或创建一个只读列表。但对我来说,这似乎是一个很大的矫枉过正。你怎么看?

请注意,我永远不会返回内部使用的列表,以便调用者可以更改我的对象的内部状态。问题只是关于临时构建的用于保存返回值的短期列表。

IEnumerable<string> GetAList() {
List<string> aList = new List<string>();
aList.Add("a");
aList.Add("b");
return aList;
}

IEnumerable<string> GetAList() {
List<string> aList = new List<string>();
aList.Add("a");
aList.Add("b");
return aList.ToArray<string>();
}

示例非常简单,在这种情况下,我会从头开始使用数组,但这只是为了说明问题。

最佳答案

the possibility that the caller casts the resulting Enumerable<T> back into the List<T> and begins to work further with it

如果您的实现发生变化,任何这样做的调用者只能怪自己。您 promise 返回 Enumerable - 只要您继续这样做,您就不会对承担更多责任的来电者的问题负责。

另请注意what @Chris mentions - 可能存在政治问题,在某些时候需要您保持向后兼容性,即使对于“违反规则”的调用者也是如此 - Raymond Chen(在 Microsoft 的 App Compatibility 团队工作)有一个博客当“此应用程序在 OS 版本 x+1 上中断”不是一个可接受的答案时,充满了恶作剧的故事......

关于c# - 如果返回类型是可枚举的,返回列表是否错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3263832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com