【问题标题】:How to convert T to object如何将 T 转换为对象
【发布时间】:2011-06-29 05:23:20
【问题描述】:

将 T 转换为实体时出错

public T Add(T entity)
{
    CAFMEntities db = new CAFMEntities();
    db.TabMasters.AddObject((TabMaster)entity);
    db.SaveChanges();
    return entity;
}

它给了我一个错误:

无法将类型“T”转换为“CAFM.Data.EntityModel.TabMaster”

谢谢。

【问题讨论】:

    标签: c# .net asp.net asp.net-mvc-3 generics


    【解决方案1】:

    那么,您希望如何应用转换? T 在哪里声明?您可以更改它,以便您拥有:

    class WhateverClass<T> where T : TabMaster
    

    此时您不需要演员表。或者如果你不能约束T,你可以使用:

    db.TabMasters.AddObject((TabMaster)(object) entity);
    

    另一种选择是:

    db.TabMasters.AddObject(entity as TabMaster);
    

    虽然我个人不太喜欢这样 - 我更喜欢对演员进行更严格的检查。

    【讨论】:

    • @abatishchev:显然是这样,虽然当然你不会得到那么好的检查。将其添加为选项。
    • @abatischev 与您的帖子不同:as 仅适用于引用类型,但T 不受此类限制......现在如果where T : class(或以其他方式限制为另一个引用)类型),然后是。
    • @pst:不,你不需要为了使用as而限制T。我刚试过。
    • @Jon Skeet void x&lt;T&gt;() { return null as T; } void Main () { x&lt;string&gt;(); } 告诉我“类型参数 'T' 不能与 'as' 运算符一起使用,因为它在 LINQPad4 中没有类类型约束和 '类' 约束” .
    • @pst:这是试图将 转换为 T - OP 正试图将 T 转换。我不确定你最后的评论是针对哪里的......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 2012-06-02
    • 1970-01-01
    • 2011-08-05
    • 2023-04-11
    • 1970-01-01
    相关资源
    最近更新 更多