我有一个带有SQL函数的Linq to SQL DataContext。虽然检索对象很好,但我想向对象添加属性,同时缩短对象名称。所以我创建了一个对象Reminder,它继承了Linq to SQL对象fnRTHU_ReminderByTaskResult和我想要的属性。
public class Reminder : fnRTHU_ReminderByTaskResult
{
public string MyProperty {get;set;}
}
然后当函数绑定到列表时,我尝试在aspx文件中执行:
<asp:Literal runat="server" Text='<%# ((Reminder)DataBinder.Container).MyProperty %>' />
DataBinder.Container的类型为fnRTHU_ReminderByTaskResult。这会导致InvalidCastException,无法将对象类型fnRTHU_ReminderByTaskResult强制转换为Reminder类型。我不明白,因为我继承了我正在铸造的类型。
答案 0 :(得分:2)
由于Linq to Sql函数返回该基类,因此您的对象永远不会是派生类的对象。因此,当试图抛弃时,它无法做到。但是,您可以在类中提供允许此强制转换工作的隐式和显式转换实现。
答案 1 :(得分:1)
问题是您试图将一个Base类的实例添加到Child类。这是无效的,因为Child继承自Base。无法保证从基地到儿童的案件将起作用(这被称为降级)。向上演员(儿童到基地)是安全的。
如果Container属性是Reminder的实例,这将有效。在这种情况下,它似乎不是。
答案 2 :(得分:-1)
不幸的是,你试图贬低哪个C#不支持。您无法从父类型转换为子类型。