【问题标题】:Grab Object out of Linq.Enumerable WhereListIterator从 Linq.Enumerable WhereListIterator 中抓取对象
【发布时间】:2021-08-12 05:24:06
【问题描述】:

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

}

【问题讨论】:

  • 你试过在 .Where() function First() 之后输入吗?类似 (SecurityToken)allTokens.Where(tk => tk.body == token).First(); .

标签: c# asynchronous ienumerable enumerable


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 感谢您的回答。我之前做过这个,通过这样做,我只得到一个 NullReferenceException。
    猜你喜欢
    • 2018-09-12
    • 2022-01-15
    • 2015-08-21
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    相关资源
    最近更新 更多