给定以下方法,我传递配置byref,然后使用foreach命名集合循环遍历它。在下面的代码示例中,我在循环中更改的值是否会在我通过ref传递的主对象中更新,我的意思是NO浅拷贝?或者你能发现我犯过的任何错误。
更具体地说,我调用config.Value = .....的行,配置对象有一组配置,所以在调用这个函数后,它们会在主对象(配置)中更新吗?
提前致谢。
public static void DecryptProviderValues(ref MyConfiguration configuration)
{
foreach (var provider in configuration.Providers)
{
var configItems = provider.Configurations;
foreach (Configuration config in configItems)
{
if(EncryptionManager.IsEncrypted(config.value))
{
config.Value = EncryptionManager.Decrypt(config.Value);
}
}
}
}
答案 0 :(得分:6)
假设这里的所有项目都是类(不是结构),那么是的,但实际上configuration
的不需要作为{传递{1}};您已经传递引用(按值),并且您没有重新分配引用,因此此处不需要ref
at所有即可。您的更改将保留并可供调用者使用。
完全相同的原因是:
ref
这里,因为Configuration x = new Configuration();
Configuration y = x;
x.Value = "abc";
Console.WriteLine(y.Value); // writes "abc"
(大概)是Configuration
,所以只有 一个对象,以及引用的两个变量对象(在简化的层面上,它们是同一对象的美化指针)。
答案 1 :(得分:2)
在你的情况下,没有必要通过configuration
传递ref
,因为在C#中你正在操纵对类实例的引用。
您可以使用ref
通过引用传递int
或struct
等值类型。