问题描述
我试图根据匹配的字符串从列表中获取一个对象(类)。我在列表中使用 .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);