我有一个函数,它接受一个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#的新手,非常感谢你的建议
答案 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'
}