我通常会做这样的事情:
string[] things = arrayReturningMethod();
int index = things.ToList<string>.FindIndex((s) => s.Equals("FOO"));
//do something with index
return things.Distinct(); //which returns an IEnumerable<string>
我发现类型和接口的混合有些令人困惑,会触发我潜在的性能问题感应器(当然,除非证明是正确的)。
这种方法是C#中惯用且正确的方法吗?还是有更好的替代方案来避免来回转换以访问正确的方法以处理数据?
编辑: 这个问题实际上是双重的:
何时适用于直接使用IEnumerable接口、数组或列表(或任何其他IEnumerable实现类型)(在接收参数时)?
你应该自由地在IEnumerable(实现未知)和列表以及IEnumerable和数组之间移动,还是那不符惯例(有更好的方法来做这件事)/ 非高性能(通常不相关,但在某些情况下可能是)/ 简直是丑陋的(难以维护,难以阅读)?