代码之家  ›  专栏  ›  技术社区  ›  Patrick

将未分配的字符串分配给数组

c#
  •  0
  • Patrick  · 技术社区  · 14 年前

    我有一个函数,它接受一个数组列表并用字符串沿着

    void func( ref ArrayList data )
    {
        if( data[0].GetType() == typeof(String) )
            data[0] = "Jimmy";
    }
    

    在调用func()的函数中,我必须创建要放入数组的字符串:

    ArrayList data = new ArrayList(1);
    string str = "";
    data.Add(str);
    

    是否可以在不创建该类型的对象的情况下给arraylist对象类型?这是:

    ArrayList data = new ArrayList(1);
    string str;
    data.Add(str);
    

    给出“使用未分配的局部变量”错误。

    @詹姆斯和格法:谢谢你的“风格”提示,我是新来的C和建议是非常感谢

    4 回复  |  直到 14 年前
        1
  •  3
  •   Guffa    14 年前

    不,那是不可能的。您需要的是指向一个字符串的引用,并且只有当它实际指向一个字符串时才有可能。保存引用的变量声明为字符串引用的事实在您将引用从变量复制到列表后并不重要。

    我认为你应该重新考虑整个概念。我不知道您为什么要发送一个值列表并像那样替换它们,但是必须有一种更面向对象的方法来完成它。

    这个 ArrayList 类实际上已过时,应使用泛型 List<T> 相反(即使您找不到任何其他公共基类 object )

    由于您总是向方法发送一个列表对象,而不是用新的列表对象替换它,因此不应使用 ref 关键字。只有当您想更改对列表的引用时,才需要这样做,而不是更改列表的内容。

        2
  •  0
  •   Miserable Variable    14 年前

    可以发送两个参数,一个是将在其中分配成员的ref arraylist,另一个是arraylist,被调用函数可以在类型为string的数据的索引处分配

        3
  •  0
  •   ChrisBD    14 年前

    如果你只想保持这种类型的安全,那么你不能使用 List<T> 在这里上课,例如 List<string> ?

        4
  •  0
  •   Giuseppe Accaputo    14 年前

    在使用上述代码的方法中,您要做的是调用 GetType() null ,这是不可能的。

    为什么不使用通用列表 List<string> 在这种情况下?你可以优雅地跳过使用的部分 获得Type() 要使用此方法确定类型,请执行以下操作:

    static void func(List<string> data)
    {
        if(data.Count > 0)
            data[0] = "Jimmy";
    }
    
    static void Main(string[] args)
    {
        List<string> lst = new List<string>(1);
    
        string str = "";
    
        lst.Add(str);
    
        func(lst);
    
        System.Console.WriteLine(lst[0]); //Prints out 'Jimmy'
    }