我有一个Func列表,我想添加元素。 如果我在Start上添加它们,如下所示,没问题:
public List<System.Func<bool>> conditions = new List<System.Func<bool>>();
void Start()
{
conditions.Add(Iamdead);
conditions.Add(Iamalive);
}
bool Iamdead()
{
...
return ...;
}
bool Iamalive()
{
...
return ...;
}
但我想在没有Start的情况下定义列表,以便我有一个干净的方法列表,我可以将其视为连续的元素。我尝试过经典格式:
public List<System.Func<bool>> conditions = new List<System.Func<bool>>()
{
bool Iamdead()
{
...
return ...;
}
,
bool Iamalive()
{
...
return ...;
}
};
这给了我解析错误
我尝试过这样:
public List<System.Func<bool>> conditions = new List<System.Func<bool>>()
{
Iamdead,Iamalive
};
static bool Iamdead()
{
...
return ...;
}
static bool Iamalive()
{
...
return ...;
}
只有当方法是静态的但我不希望它们是静态的时,这才起作用。没有静态,它不起作用。我似乎无法理解这里的数据结构。谁能告诉我在列表中定义Func的正确方法?
由于
答案 0 :(得分:7)
我强烈怀疑问题是您在字段初始值设定项中尝试访问this
(隐式)。你不被允许这样做。只需将初始化移动到构造函数中:
// You don't really use public fields, do you?
private readonly List<Func<bool>> conditions;
public MyClass()
{
conditions = new List<Func<bool>> { Method1, Method2 };
}
private bool Method1() { ... }
private bool Method2() { ... }
(我假设你实际希望你的条件依赖于实例中的状态。如果他们没有,你不需要this
。如果方法不是'除了这些条件以外,它们使用的时间很短,你可能想要使用lambda表达式。)
答案 1 :(得分:1)
像这样:
public List<System.Func<bool>> conditions = new List<System.Func<bool>>()
{
() => false,
() => true,
};
答案 2 :(得分:0)
你可以使用lambdas:
public List<System.Func<bool>> conditions = new List<System.Func<bool>>()
{
() =>
{
return false;
}
,
() =>
{
return true;
}
};