隐式转换类型

Posted

技术标签:

【中文标题】隐式转换类型【英文标题】:Implicitly Convert Type 【发布时间】:2013-07-09 05:30:47 【问题描述】:

我在 WPF 中这样做,我正在使用实体框架。

这是我的 CRUD 类文件中的查询代码:

 public class QuestionHint
    
        public int? QuestionNo  get; set;  //change the type accordingly 
        public int? ActivityID  get; set;  //change the type accordingly 
        public int? TaskID  get; set;  //change the type accordingly 
        public string Answer  get; set;    //change the type accordingly 
        public string QuestionContent  get; set;    //change the type accordingly 
        public string joined  get; set;    //change the type accordingly 
        public string joinOption  get; set;    //change the type accordingly 

    

        public IList<QuestionHint> GetListKeys(int listTask, int listActivity)
    
        IList<QuestionHint> lstRecords = context.questionhints.GroupBy(x => new  x.QuestionNo, x.ActivityID, x.TaskID ).ToList().Select(g => new QuestionHint()
        
            QuestionNo = g.Key.QuestionNo,
            ActivityID = g.Key.ActivityID,
            TaskID = g.Key.TaskID,
            joined = String.Join(" ",
                g.OrderBy(q => q.questionhintID)
                 .Select(i => i.QuestionContent + "[" + i.Answer + "]")),
            joinOption = String.Join(" ",
                   g.OrderBy(q => q.questionhintID)
                    .Select(a => "[" + a.Option1 + "," + a.Option2 + "]"))


        ).Where(x => x.TaskID == listTask && x.ActivityID == listActivity)
            //.Take(50)
    .ToList();

        return lstRecords;
    

我在后面的代码中称之为:

 private DAO.DAOQuestionHint qh = new DAO.DAOQuestionHint();

    public MainWindow2()
    
        InitializeComponent();
        PopulateQuestion(1, 5);
    

    private void PopulateQuestion(int activityID, int taskID)
    


        IList<QuestionHint> lstQuestionHints = qh.GetListKeys(taskID, activityID); // ERROR

        //codes here...
        

我的 xaml.cs 后面的代码中出现此错误:

不能 'System.Collections.Generic.IList' 到“System.Collections.Generic.IList”。一个 存在显式转换(您是否缺少演员表?)

iStellar 是项目的名称。 DAOQuestionHint 是 CRUD 类文件的名称。

CRUD类文件没有错误,我使用相同的查询检索另一个项目中的记录,它运行良好,不知道为什么它在这里不起作用。

【问题讨论】:

我不明白..你的返回类型是IList&lt;QuestionHint&gt;,你的变量是IList&lt;Model.questionhint&gt;...它们似乎不兼容 您应该返回IEnumerable&lt;T&gt;(或至少ICollection&lt;T&gt;),除非您需要真正通过索引访问项目。而且,即使那样......你也可以在接收项目枚举的代码部分中调用ToList()。不建议将List&lt;T&gt;,甚至IList&lt;T&gt; 作为返回值。 而且,您的 LINQ 函数没有意义...您正在对新的匿名对象执行 GroupBy...它们中的任何一个都不会被分组。然后,你ToList() 之后就没有必要了。您真正需要的只是首先执行Where() 语句,然后执行Select() 语句...这是最有效的方法。 但是当我尝试检索记录并将它们显示在其他 Web 项目的网格视图中时它可以工作。我试图将 QuestionHint 更改为 Model.questionhint ,它给了我很多错误。 【参考方案1】:

您在每个示例中对通用参数使用不同的大小写 - IList&lt;QuestionHint&gt; 中的 GetListKeys()IList&lt;Model.questionhint&gt; 中的 PopulateQuestion()。我猜这些是指名称相似但不同的类型。

【讨论】:

我注意到了,但我不能写 QuestionHint 而不是 Model.questionHint @user2376998 如果 QuestionHint 位于名为“Model”的命名空间中,那很好,但它必须是 Model.QuestionHint,而不是 Model.questionhint。如果您右键单击每个并单击“转到定义”,它们会转到同一个地方吗? 我看错了 QuestionHint ,它实际上是一个单独的类,请参阅上面的编辑。

以上是关于隐式转换类型的主要内容,如果未能解决你的问题,请参考以下文章

15Scala隐式转换和隐式参数

JS强制类型转换,隐式类型转换, == 和===的区别

Java除了数字类型的自动隐式类型转换,对类有类似功能么?

隐式类类型转换以及如何避免隐式转换

显示转换和隐式转换

隐式转换和显式转换