2010-08-26 42 views
0

我有一个函数,它接受一个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'”错误。

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

+1

使用'is'而不是'GetType()== typeof(String)是不太复杂的。 – James 2010-08-26 11:16:53

回答

3

不,那是不可能的。你想要的是一个指向字符串的引用,只有当它指向一个字符串时才可能。一旦将变量的引用复制到列表中,将保存引用的变量声明为字符串引用的事实并不重要。

我认为你应该重新思考整个概念。我不知道你发送价值清单的原因,并以此替换它们,但必须采取更加面向对象的方式。

ArrayList类实际上已过时,您应该使用通用的List<T>来代替(即使找不到其他任何常见基类,但不能使用object)。

由于您总是将列表对象发送给该方法,而不是将其替换为新的列表对象,因此不应使用ref关键字。这只适用于当你想改变列表的引用而不是列表的内容。

+0

干杯Guffa。我这样做是因为func从通信链接中提取数据,但每条消息具有不同顺序的不同数据类型。 ArrayList似乎是告诉func什么数据类型在哪里的好方法。 – Patrick 2010-08-26 13:01:23

0

您可以发送两个参数,一个裁判的ArrayList中的构件将被分配和另一个ArrayList和被调用的函数可以在索引中分配类型为字符串的数据字符串

0

如果您只想保持此类型的安全,那么您是否可以不使用List<T>类,而是例如List<string>

0

你在上面的代码中试图在你的方法中做什么是在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' 
} 
+0

对不起,并非完美的问题,清单包含不同的数据类型 – Patrick 2010-08-26 13:01:48