2010-08-26 43 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