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

时间:2010-08-26 10:54:53

标签: c#

我有一个函数,它接受一个ArrayList并用

行的字符串加载它
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);

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

@James和Guffa:感谢'风格'的提示,我是c#的新手,非常感谢你的建议

4 个答案:

答案 0 :(得分:3)

不,那是不可能的。你想要的是一个指向字符串的引用,只有当它实际指向一个字符串时才有可能。将变量的引用复制到列表后,将引用变量声明为字符串引用的事实无关紧要。

我认为你应该重新思考整个概念。我不知道您发送值列表并将其替换为这样的原因,但必须有一种更面向对象的方法。

ArrayList类几乎已过时,您应该使用通用List<T>代替(即使您找不到除object之外的任何其他公共基类)。

由于您总是向列表对象发送方法而不是用新列表对象替换它,因此不应使用ref关键字。这仅适用于您希望更改列表引用的情况,而不是列表中的内容。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果您只想保持此类型安全,那么您可以在此处使用List<T>课程,例如List<string>

答案 3 :(得分:0)

使用上述代码在您的方法中尝试执行的操作是在GetType()上调用null,这是不可能的。

为什么不在这种情况下使用通用列表List<string>?您可以优雅地跳过使用GetType()的部分来确定使用此方法的类型:

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'
}