使用LINQ时无效的Cast Exception

0 c# linq exception

我是一个经典的新手......

我可以编译我的程序,但在运行程序时获得无效的广播

我的代码出了什么问题.我不知道该搜索什么:(

这是我的代码(.net 3.5)

class Element{
    private int i;
    public int I { get { return i; } set { i = value; } }
    private string s;
    public string S { get { return s; } set { s = value; } }

    public Element(string _s, int _i) {
        this.s = _s;
        this.i = _i;
    }
}
class myDict : Dictionary<string, Element> {
    public void afunction() { 

    }
}

class Program {
    static void Main(string[] args) {

        myDict myDict = new myDict();
        myDict.Add("a", new Element("x", 23));
        myDict.Add("b", new Element("y", 48));

       var sortedDict = ((from entry in myDict orderby entry.Key descending select entry).Take(10));

       myDict = (myDict)sortedDict.ToDictionary(v => v.Key, v => v.Value);
        foreach (KeyValuePair<string, Element> kvp in myDict) {
            System.Console.WriteLine("-> " +kvp.Key + " " + kvp.Value);
        }
        Console.ReadLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢!迈克尔:)

Eri*_*ert 6

你好

嗨,您好.

我是一个经典的新手.

欢迎乘坐.

我可以编译我的程序,但在运行程序时得到一个无效的强制转换异常

一个强制转换操作符通常意味着"我告诉编译器这个转换是有效的.如果我犯了错误,在运行时抛出一个无效的强制转换异常."

我的代码出了什么问题.我不知道该怎么做.

那么,而不是给你一条鱼 - 字典上的演员是无效的 - 让我们教你如何捕捉自己的鱼.

在调试模式下编译程序并在调试器中运行它.调试器应该在异常的确切位置处中断.然后,您可以分析该确切站点的错误.

如果由于某种原因无法在调试器中运行代码,请在调试模式下编译程序并正常运行.当您收到异常时,请查看异常的"堆栈跟踪"部分.它应该具有异常站点的行号,以便您可以检查该代码.

如果由于某种原因你无法做到这一点,请使用异常消息尝试解决它."无效的强制转换异常"意味着不良行为是强制转换操作符的结果.程序中有两个位置使用了强制转换运算符.在字典中的演员表中有明确的用法,并且在foreach循环中有隐式使用.

很多人都对后者有所了解.当你说

foreach(Giraffe giraffe in animals)
Run Code Online (Sandbox Code Playgroud)

这实际上意味着"将动物名单中的每只动物都投入到长颈鹿中,并且如果其中一只是老虎或小袋鼠或其他东西,则给予无效的施法例外".它并不意味着"忽略所有不是长颈鹿的动物" - 如果你想要它,那么就说

foreach(Giraffe giraffe in animals.OfType<Giraffe>())
Run Code Online (Sandbox Code Playgroud)

问题几乎肯定会出现在这两个地方之一.

  • +1:我是刚刚学过`foreach(动物长颈鹿长颈鹿.OfType <Giraffe>())的人 (2认同)