从 Linq.Enumerable WhereListIterator 中抓取对象

问题描述

我试图根据匹配的字符串从列表中获取一个对象(类)。我在列表中使用 .Where 函数。我尝试用不同的强制转换替换它,但它总是抛出 InvalidCastException。有没有人知道如何直接投射或从列表中取出对象?

异常: 无法将类型为“System.Linq.Enumerable+WhereListIterator`1[Security.SecurityToken]”的对象转换为类型“Security.SecurityToken”。

public class SecurityToken {

    public string body = "example";    
}    
public class Tokenizer {

        private static List<SecurityToken> allTokens = new List<SecurityToken>();

        public static async Task<bool> isTokenValid(string token)
        {
            SecurityToken foundToken = (SecurityToken)allTokens.Where(tk => tk.body == token);
            
            return foundToken.body.equals(token);                
        } 

}

解决方法

在读取错误消息时,您将查询 System.Linq.Enumerable+WhereListIterator 的结果 allTokens.Where(tk => tk.body == token); 转换为错误的 SecurityToken,更好的方法是使用 FirstOrDefault ; 但是查看您的代码,您只需要检查是否有任何项目满足条件,因此我建议使用 Any

return allTokens.Any(tk => tk.body == token);
,

Where 返回一个集合而不是单个对象。您需要更改如下代码:

SecurityToken foundToken = allTokens
                            .Where(tk => tk.body == token)
                            .FirstOrDefault();

return (foundToken !=null);