如何将T转换为对象。

8

我在将T转换为实体时遇到了错误

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

我遇到了一个错误:

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

谢谢。

1个回答

18

那么,你希望如何应用转换? T声明在哪里? 你可以尝试更改它,使其变为:

class WhateverClass<T> where T : TabMaster

在这种情况下,您不需要转换类型。或者如果您无法限制T,可以使用:

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

另一种选择是:

db.TabMasters.AddObject(entity as TabMaster);

尽管我个人不太喜欢这种方式——我更喜欢使用强制类型检查的方法。

@abatishchev:显然是这样,但当然这样做就不能得到很好的检查。我会将其作为一个选项添加进去。 - Jon Skeet
1
@abatischev 不是按照你的帖子来说:as 只适用于引用类型,但 T 并没有被限制为引用类型... 如果 where T : class(或者其他限制为另一种引用类型),那么是可以的。 - user166390
@pst:不需要对T进行约束就能使用as。我已经尝试过了。 - Jon Skeet
@Jon Skeet void x<T>() { return null as T; } void Main () { x<string>(); } 在LINQPad4中会显示"The type parameter 'T' cannot be used with the 'as' operator because it does not have a class type constraint nor a 'class' constraint"。 - user166390
当然啦,TabMaster 只是一个引用类型。解释有点令人失望。 - user166390
1
@pst:这是试图将转换为 T- OP正在尝试从T*转换。我不确定你最后一条评论的目的地在哪里... - Jon Skeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接