向 Func 添加方法
Add methods to Func
我有一个 Func 列表,我想添加元素。
如果我像下面这样在“开始”中添加它们,没问题:
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 ...;
}
但我想在没有开始的情况下定义列表,这样我就有了一个干净的方法列表,我可以将这些方法视为连续的元素。我试过经典格式:
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 的正确方法?
谢谢
像这样:
public List<System.Func<bool>> conditions = new List<System.Func<bool>>()
{
() => false,
() => true,
};
我强烈怀疑问题是您试图在字段初始值设定项中访问 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 表达式。)
你可以只使用 lambdas:
public List<System.Func<bool>> conditions = new List<System.Func<bool>>()
{
() =>
{
return false;
}
,
() =>
{
return true;
}
};
我有一个 Func 列表,我想添加元素。 如果我像下面这样在“开始”中添加它们,没问题:
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 ...;
}
但我想在没有开始的情况下定义列表,这样我就有了一个干净的方法列表,我可以将这些方法视为连续的元素。我试过经典格式:
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 的正确方法?
谢谢
像这样:
public List<System.Func<bool>> conditions = new List<System.Func<bool>>()
{
() => false,
() => true,
};
我强烈怀疑问题是您试图在字段初始值设定项中访问 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 表达式。)
你可以只使用 lambdas:
public List<System.Func<bool>> conditions = new List<System.Func<bool>>()
{
() =>
{
return false;
}
,
() =>
{
return true;
}
};