Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 替换引用列表引用的对象是否可行_C#_Reference - Fatal编程技术网

C# 替换引用列表引用的对象是否可行

C# 替换引用列表引用的对象是否可行,c#,reference,C#,Reference,我想在C#中做一件事: MyClass A、B、C; 无效试验(列表lst\U参考) { //为lst_ref中的每个引用指定一个新对象 } 我想做的是打电话 test(new list<object> {A, B, C}) test(新列表{A,B,C}) 不更改由A、B、C引用的对象的属性,而是更改由名称A、B、C指向的对象本身的属性 我理解为什么上面的伪代码不起作用 但是我想确认我想做的在C语言中是不可行的# (很抱歉,我找不到更好的标题)如果您想定义一个可以为三个不同变

我想在C#中做一件事:

MyClass A、B、C;
无效试验(列表lst\U参考)
{
//为lst_ref中的每个引用指定一个新对象
}
我想做的是打电话

test(new list<object> {A, B, C})
test(新列表{A,B,C})
不更改由A、B、C引用的对象的属性,而是更改由名称A、B、C指向的对象本身的属性

我理解为什么上面的伪代码不起作用

但是我想确认我想做的在C语言中是不可行的#


(很抱歉,我找不到更好的标题)

如果您想定义一个可以为三个不同变量中的每一个赋值的方法,那么是的,有几种方法可以做到这一点,例如使用委托:

public static void Set3Variables<T>(params Action<T>[] actions)
    where T : new()
{
    foreach (var action in actions)
        action(new T());
}
publicstaticvoidset3variables(params Action[]actions)
其中T:new()
{
foreach(行动中的var行动)
动作(新T());
}
这将允许您编写:

Set3Variables<MyClass>(
    value => A = value,
    value => B = value,
    value => C = value);
Set3Variables(
value=>A=value,
value=>B=value,
值=>C=值);

调用此方法后,您将实际设置这三个变量,而不仅仅是在不影响这三个变量的情况下改变该变量的值或创建一些新值。

听起来您希望在单个参数上复制
ref
的行为,但是有一个包含要更新的引用的列表吗?没错,很抱歉我的description@huirong我误解了你的问题。我认为除了进入
不安全的
区域并处理指针之外,没有其他方法可以做到这一点。不,你不能这么做。您可以将A、B和C放入列表中,但是如果希望A、B和C在方法完成后更改,则需要在方法完成后分配它们。我有一种预感,列表也不是你真正想要的,但这将取决于你的实际问题。@Vache,thx确认非常有趣,从未使用过这个,让我玩一下,非常感谢!
Set3Variables<MyClass>(
    value => A = value,
    value => B = value,
    value => C = value);