【发布时间】:2017-01-26 09:26:10
【问题描述】:
我正在为一群人使用 C# 编码,我正在设计要编码的方法的签名,我需要一种方法来确保人们不会修改他们将收到的某些参数。 它们接收大结构,因此它们是通过引用发送的,但我希望它们在不修改原始值的情况下使用数据。但由于结构很大,我们不想复制它们。
我们可以假设他们不想更改数据,我们只需要保护他们不犯错误。
C# 提供哪些解决方案?
这里是示例
class MyDataBlok {
List<double> samples;
int someParams;
double lots of other params
}
class MySetOfDataBlock
{
List<MyDataBlock> DataSet;
bool SomeParam;
Double lots of other params;
}
class MethodsToBeCoded
{
ProcessSetOfData( /*some tag defining data as protected*/ MySetOfDataBlock data)
{
//Here I want code that uses data without modifying data
// nor the content on any data.DataSet[i]
}
}
【问题讨论】:
-
你应该看看单元测试。
-
什么?!
struct-instances 是按值传递的。无论如何我不明白你的问题。你能展示一些示例代码来说明你想要做什么吗? -
你不能阻止实现方法的人修改通过引用传递的参数。然而,由于 `struct´s 是通过 按值 传递的,因此该方法内的修改不会对调用代码产生任何影响。
-
@himbrombeere 使用
struct很好,除非它包含像List<...>这样的引用类型成员,对吧?在这种情况下,添加/删除列表将反映在调用代码中?
标签: c# performance