我拥有的是:
public static class IDs {
public static string someID { get; set; }
static IDs() {
log.info(someID);
// use someID here
}
}
public class otherClass {
public void otherMethod(string sym) {
IDs.someID = sym;
}
}
,然后使用otherClass
的实例,如下所示:
otherClassInstance.otherMethod("someStringSymbol");
我没有任何构建错误,但是log.info(someID);
正在打印null
。
我以为它是someStringSymbol
。
答案 0 :(得分:3)
这是因为静态构造函数is called automatically before the first instance is created or any static members are referenced.。
这意味着当otherClass
的实例调用IDs.someID = sym;
时首先执行的操作是静态构造函数,即static IDs()
中的代码。 / p>
目前,静态变量尚未初始化,您基本上正在执行log.info(null);
。
静态构造函数完成后,变量将被初始化,因此在otherMethod
的第一次引用之后,您应该能够在IDs
中看到其值。
考虑到OP的要求:
我想在switch语句中使用someID
中传递的值
解决方案可以是在explicit getters and setters的帮助下,只要设置新值就简单地执行静态方法:
public static class IDs
{
private static string _someID; // backing field
public static string SomeID
{
get { return _someID; }
set
{
_someID = value;
DoSomethingWithSomeID();
}
}
private static DoSomethingWithSomeID()
{
// Use SomeID here.
switch (IDs.SomeID)
{
...
}
}
}
public class OtherClass
{
public void OtherMethod(string sym)
{
// This will set a new value to the property
// and invoke DoSomethingWithSomeID.
IDs.SomeID = sym;
}
}
每次有人为DoSomethingWithSomeID
设置新值时,都会调用 SomeID
。
答案 1 :(得分:1)
我认为您尝试做的事情不适合静态类。我会尝试以下
list1 = ['__light_grp1', '__light_grp1_direct', '__light_grp2', '__light_grp2_direct']
list2=[]
for i in list1:
if i[-1:].isdigit():
list2.append(i)