说明我的问题的最好方法是这个C#示例:
//It seems that the comment is required:
//I need to change the values of someString0, someString1, or someStringN
//depending on the `type` variable
ref string strKey;
switch(type)
{
case 0:
strKey = ref someString0;
break;
case 1:
strKey = ref someString1;
break;
//And so on
default:
strKey = ref someStringN;
break;
}
//Set string
strKey = "New Value";
我可以用C#吗?
PS。我知道我可以在一个函数中执行此操作。我问的是“在线”方法。
答案 0 :(得分:2)
如果你真的想要按照你要求的方式进行任务,这里有一种不使用ref的方法
Action<string> action;
switch (type) {
case 0:
action = newVal => someString0 = newVal;
break;
case 1:
action = newVal => someString1 = newVal;
break;
case 2:
action = newVal => someString2 = newVal;
break;
default:
action = null;
break;
}
if (action != null) action.Invoke("some new value");
在性能方面,上面的执行时间比下面的直接替代方案长约8纳秒
switch (i) {
case 0:
someString0 = "some new value";
break;
case 1:
someString1 = "some new value";
break;
case 2:
someString2 = "some new value";
break;
default:
break;
}
但是你说话的时间比没什么都快。在我不是特别快的笔记本电脑上,Action版本需要大约13纳秒来执行,而直接分配方法需要大约5.5纳秒。这两者都不是重要的瓶颈。
答案 1 :(得分:1)
为什么要将其拆分为交换机然后再分配?为什么不在交换机中设置值并完全避免ref行为?
string newValue = "new value";
switch(type)
{
case 0:
someString0 = newValue;
break;
case 1:
someString1 = newValue;
break;
//And so on
default:
someStringN = newValue;
break;
}
答案 2 :(得分:0)
为什么不像这样设置正确的字符串变量:
switch(type)
{
case 0:
someString0 = "New Value";
break;
case 1:
someString1 = "New Value";
break;
//And so on
default:
someStringN = "New Value";
break;
}
更好的方法是用字符串数组替换n个字符串变量,以便赋值变成一行代码:
string[] someString;
someString[type] = "New Value";