为了账号安全,请及时绑定邮箱和手机立即绑定

C# 使用泛型和表达式树获取对象字段值

C# 使用泛型和表达式树获取对象字段值

C#
一只甜甜圈 2022-01-15 16:42:04
我有两个具有相似领域的课程:Class Foo {    string name;    int val;};Class Bar {    string name;    int val;};有没有办法使用泛型来检索这些类的对象的字段名称和值?类似于以下内容:string GetName<T> (T obj){    //returns T.name}我想确保对此进行编译时检查,以防类字段发生更改。更新:我不控制类 Foo 和 Bar 的定义。它们将在图书馆中向我展示并且可以更改。我可以使用以下内容:Type myType = myObject.GetType();var value = myType.GetProperty("name").GetValue(myObject, null);但我认为这不会在编译时检查。
查看完整描述

2 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

如果您想要编译时安全,并且您不能修改Fooand Bar,则处理此问题的典型方法是使用重载:


public string GetName(Foo o) { return o.Name; }

public string GetName(Bar o) { return o.Name; }

编译器会自动选择匹配参数类型的方法,所以你只需要调用它


GetName(eitherObject);

...而且它是类型安全的。


你不能真正使用泛型,因为 Foo 和 Bar 缺少一个公开的通用接口Name。


当然,您可以使用反射,但这意味着放弃编译时安全。


查看完整回答
反对 回复 2022-01-15
?
慕神8447489

TA贡献1780条经验 获得超1个赞

这似乎是您可以使用继承的情况。如果这两个类具有相似的字段,您可以让它们实现一个具有所有共享字段的基类。这是一个例子:


public class BaseEntity

{

    int val;

    protected string name;

    public string Name

    {

        get

        {

            return name; // Only get is exposed to prevent modifications

        }

    }

}


public class ClassA : BaseEntity

{

   // Other fields or methods

}


public class ClassB : BaseEntity

{

    // Other fields or methods

}


查看完整回答
反对 回复 2022-01-15
  • 2 回答
  • 0 关注
  • 449 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号