【发布时间】:2014-02-12 16:15:38
【问题描述】:
是否可以,正常,遵循标准指南......(你明白了)有一个类似以下的方法:
public void Method(IList<int> test)
{
test.Add(1);
}
不知何故,我希望从方法签名中获得一些信息,即参数将被修改(如 ref 或 out)或约定如返回与返回值相同的列表,例如:
public IList<int> Method(IList<int> test)
{
test.Add(1);
return test;
}
你怎么看? 提前致谢。
【问题讨论】:
-
方法签名可以隐式提供此信息:如果您不打算修改参数,则应将其类型降级为只读类型(在本例中为
IEnumerable<int>)。一般来说,最好使用“纯”方法(没有任何副作用),但当然,当你想做煎蛋时,你必须打碎一些鸡蛋。 -
我个人尽量避免在公共方法中出现类似的副作用,除非其意图非常明显。
-
@Jon,问题是您有时需要一个索引器,而 .Net 不提供任何带有索引器的只读接口(很遗憾)。
-
@Grzenio:
IReadOnlyList<T>? -
@Jon,.NET Framework 4.5。我的公司需要数年才能升级:(不过感谢您让我知道,这绝对是朝着正确方向迈出的一步!
标签: c# .net parameters parameter-passing