所以我有以下List
:
List<AttackStyle> AttackStyles = new List<AttackStyle>();
使用以下类型的对象:
AttackStyle lStyle = new AttackStyle();
lStyle.Name = "Attack Achilles";
lStyle.ParameterID = 0;
lStyle.Forward = Vector3.forward;
lStyle.HorizontalFOA = 70f;
lStyle.VerticalFOA = 40f;
lStyle.DamageModifier = 1f;
lStyle.ActionStyleAlias = "Jump";
lStyle.IsInterruptible = true;
AttackStyles.Add(lStyle);
现在我希望找到ParameterID
等于某个值的字段ActionStyleAlias
(例如"Jump"
)
这适用于Unity应用程序,因此搜索/查找需要尽可能快。
答案 0 :(得分:3)
var result = AttackStyles.FirstOrDefault(x => x.ActionStyleAlias == "Jump").ParameterID;
答案 1 :(得分:1)
直接的解决方案是:
var pId = AttackStyles.FirstOrDefault(x=> x.ActionStyleAlias == "Jump")?.ParameterID
但是如果你想获得更好的性能,那么索引你想要的最有用的属性会更好。因此,在最有用的字段上构建字典以及时获得更好的性能。例如:
var styles = new Dictionary<string, AttackStyle>();
styles.Add("Jump", new AttackStyle()
{
Name = "Attack Achilles",
ParameterID = 0,
Forward = Vector3.forward,
HorizontalFOA = 70f,
VerticalFOA = 40f,
DamageModifier = 1f,
ActionStyleAlias = "Jump",
IsInterruptible = true
});
然后,通过这个找到对象:
var pId = styles["Jump"].ParamterId;
或者如果它可能为null:
if(styles.Keys.Contains("Jump"))
var pId = styles["Jump"].ParamterId;
答案 2 :(得分:1)
var param = AttackStyles.First(x => x.ActionStyleAlias.Equals(value)).ParameterID;
答案 3 :(得分:1)
如果系列中包含所需的项目,请先返回ParameterID
;否则-1
:
var result = AttackStyles
.Where(item => item.ActionStyleAlias == "Jump")
.Select(item => item.ParameterID)
.DefaultIfEmpty(-1)
.First();
答案 4 :(得分:0)
您可以尝试扩展方法。你也应该考虑空案例:
static class Extensions
{
public static int? FindParameterId(this List<AttackStyle> values, string actionStyleAlias)
{
return values.FirstOrDefault(x => x.ActionStyleAlias == actionStyleAlias)?.ParameterID;
}
}
然后使用它:
List<AttackStyle> attackStyles = new List<AttackStyle>();
var parameterId = attackStyles.FindParameterId("Jump");