我有一个静态功能:
static string GenRan()
{
List<string> s = new List<string> {"a", "b"};
int r = Rand();
string a = null;
if (r == 1)
{
a += s[0];
s.RemoveAt(0);
}
if (r == 2)
{
a += s[1];
s.RemoveAt(1);
}
return a;
}
但每次我调用函数时,列表都会重置,所以我想从静态函数外部访问列表。
有办法吗?
我试过了:
static void Main(string[] args)
{
List<string> s = new List<string> {"a", "b"};
string out = GenRan(s);
}
static string GenRan(List<string> dict)
{
int r = Rand();
string a = null;
if (r == 1)
{
a += s[0];
s.RemoveAt(0);
}
if (r == 2)
{
a += s[1];
s.RemoveAt(1);
}
return a;
}
然后我得到一个索引超出范围错误(不确定原因)。
有人可以帮忙吗?
答案 0 :(得分:9)
您需要将其作为static field变量添加到类中:
private static List<string> s = new List<string> { "a", "b" };
static string GenRan()
{
int r = Rand();
string a = null;
if (r == 1)
{
a += s[0];
s.RemoveAt(0);
}
if (r == 2)
{
a += s[1];
s.RemoveAt(1);
}
return a;
}
答案 1 :(得分:1)
但每次我调用函数时,列表都会重置,所以我想从静态函数外部访问列表。
你的意思并不是很清楚,但如果你的意思是你希望列表在调用之间保持持久,你需要在方法之外将它声明为一个静态变量:
private static readonly List<string> s = new List<string> {"a", "b"};
现在您可以从任何方法访问列表,它基本上是类的状态的一部分。但是,这种方法附带 lot 的警告:
List<T>
不是线程安全的,通常静态方法应该是线程安全的。如果您刚刚接触C#并且没有使用多个线程,那么您现在可以忽略它。s
不会指示列表的含义。