如何在C#中声明字符串引用变量?

时间:2013-11-06 00:13:55

标签: c# .net

说明我的问题的最好方法是这个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。我知道我可以在一个函数中执行此操作。我问的是“在线”方法。

3 个答案:

答案 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";