在 C# 中将类作为参数传递,然后想要访问类的属性

本文关键字:然后 访问 属性 参数传递 | 更新日期: 2023-09-27 17:56:40

我正在尝试重构一些代码,因为我有大约 7 次这样的代码出现:

List<RHEvent> eventResults = DBConnection.Table<RHEvent>().Where(t => (int)t.PreferredImage == ID).ToList();
foreach (RHEvent result in eventResults)
{
    result.PreferredImage = 0;
    DBConnection.Update(result);
}

其中 RHEvent 通过不同的出现更改为不同的类名。

我已经开始尝试编写更通用的代码,但我遇到了一个障碍。这是我到目前为止得到的:

private void ResetPreferredImage<T>(int ID) where T: new()
{
    List<T> results = DBConnection.Table<T>().Where(t => (int)t.PreferredImage == ID).ToList();
}

问题是编译器不喜欢 PreferredImage,因为它无法在抽象类中识别它。

有没有办法让编译器确信该属性存在,或者根本不可能做我正在尝试做的事情?

谢谢。

菲利普

在 C# 中将类作为参数传递,然后想要访问类的属性

你可以尝试这样的东西

private void ResetPreferredImage<T>(int ID) where T : BaseClass,new()
        {
            List<T> results = DBConnection.Table<T>().Where(t => (int)t.PreferredImage == ID).ToList(); 
        }

现在编译器会将 PreferredImage 属性识别为基类的属性

如果他们没有实现公开PrefferedImage属性的基类,你唯一的其他选择就是使用反射器。

请参阅 C# 反射和获取属性