处理具有共同属性但不同对象类型的对象的方法

2024-03-05

我有大量自动生成的对象。尽管它们都是不同的、不相关的类,但所有对象都共享一些基本属性(名称、id 等)。我无法控制这些对象的生成,因此不幸的是我无法采取实现接口的理想方法。我想创建一种方法,在其中传递这些对象中的任意一个,并使用这些公共属性执行某些操作。

总体思路是这样的:

someObj a = new someObj();
a.name = "sara";
diffObj b = new diffObj();
b.name = "joe";
string phrase = string.Format("I am with {0} and {1}", 
    getName(a), getName(b));

private string getName(object anyObjWithName)
{
    return anyObjWithName.name;
}

虽然这自然是行不通的。

我认为通用方法可能包含答案,但我能看到用当前类型调用它的唯一方法是使用genericMethod.Invoke,它仍然存在相同的问题,即无法解析方法中传递的对象的属性。这与使用仅在执行时已知的类型参数调用泛型方法 https://stackoverflow.com/questions/325156/calling-generic-method-with-a-type-argument-known-only-at-execution-time or 如何使用给定的 Type 对象调用泛型方法? https://stackoverflow.com/questions/1408120/how-to-call-generic-method-with-a-given-type-object其中,方法中仅使用类型或类型的属性,而不是对象的属性。

我知道这(非常)容易出错,但我可以保证遇到的所有对象都将具有被操作的公共属性。


我可以保证遇到的所有对象都将具有被操作的共同属性

如果是这种情况,您可以使用dynamic:

private string getName(dynamic anyObjWithName)
{
    return anyObjWithName.name;
}

请注意,使用任何没有name属性在运行时才会失败。

如果您想增加一点安全性,您可以乘坐RuntimeBinderException如果该属性不存在,则会抛出异常:

private string getName(dynamic anyObjWithName)
{
    try {
        return anyObjWithName.name;
    }
    catch(RuntimeBinderException) {
        return "{unknown}";
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

处理具有共同属性但不同对象类型的对象的方法 的相关文章

随机推荐

  • 使用方法初始化常量变量 (C#)

    是否可以使用另一个类的方法初始化常量值 namespace ConsoleApplication1 class Program const int gravit haha habc something like this static vo
  • 弹性盒/网格布局中的最后一个边距/填充折叠

    我有一个项目列表 我正在尝试使用 Flexbox 将其排列成可滚动的水平布局 容器中的每个项目都有左右边距 但最后一个项目的右边距正在折叠 有没有办法阻止这种情况发生 或者有一个好的解决方法 ul list style type none
  • Laravel 中使用 return 重定向到外部 URL

    我正在尝试使用 SMS INDIA HUB API 向用户发送一次性密码 为此 我需要重定向到 URL 格式 如果我们加载这个 URL 它将返回一些消息 我需要把这条消息传达给 我试过这样 url http cloud smsindiahu
  • 当我在分析模式下运行我的应用程序时,它停止响应

    我的 Android 应用程序在长时间运行的会话中遇到一些 OutOfMemory 错误 为了找到原因 我尝试使用 Android Studio Profiler 但它停止工作并在使用后 10 秒内冻结应用程序 这是 Android Stu
  • 如何在 URL 中传递 Javascript 变量?阿贾克斯

    我试图在我使用的 url 中传递 accesstoken 和 pageid 的值 有什么想法如何正确地做到这一点吗
  • 文档中哪里说 while 测试 readdir 的定义?

    也可以看看 readdir 的 0 结果在 while 条件下如何不为 false https stackoverflow com questions 843430 how is 0 result from readdir not fals
  • VarBinary 到图像 url

    我正在将 Base64 图像转换为byte 并将其存储在varbinarySQL Server 中的列 我想从数据库获取图像并将其设置为 ASP NET 的图像 urlimage 我怎样才能做到这一点 将图像写入数据库的代码 string
  • 在不同行上选择满足不同条件的值

    假设我有一个像这样的两列表格 userid roleid 1 1 1 2 1 3 2 1 我想获得所有不同的用户 IDroleids1 2 AND 3 使用上面的示例 我想要返回的唯一结果是userid1 我该怎么做 好吧 我对此投了反对票
  • 使用 wingrep 搜索 IP 地址

    我正在使用 WinGrep 在 txt 文件中搜索 IP 地址 但我不知道如何让它使用正则表达式进行搜索 有人对这个有经验么 如果您不需要考虑 IPv6 只需要没有端口号的数字 IP 地址 并且不需要验证地址 即不匹配非法地址行321 45
  • Spring MVC 控制器返回 HTML

    我在尝试将 HTML 返回到 Spring MVC 控制器时遇到问题 它看起来像这样 RequestMapping value QUESTION GROUP CREATE URL method RequestMethod POST publ
  • Node.js 上的多个服务器

    我需要在同一个 Nodejs 实例上模拟四个服务器 具有不同的主机和端口 一个例子可以是 域1 8000 域2 8010 域名3 8020 域4 8030 有人可以帮我吗 谢谢 我添加了一个示例 其中包含使用节点的 2 个服务器的可能解决方
  • Java 8 中的多个 null 检查

    我有下面的代码 对于多个空检查来说有点难看 String s null if str1 null s str1 else if str2 null s str2 else if str3 null s str3 else s str4 所以
  • Scala 类型系统的优点

    我正在探索 Scala 语言 我经常听到的一个说法是 Scala 有一个stronger类型系统优于 Java 我认为人们的意思是 scalac拒绝某些有缺陷的程序javac会愉快地编译 只会导致运行时错误 某些不变量可以在 Scala 程
  • Windows批处理文件:多个if条件

    有没有办法说类似的话 if 1 1 or 1 2 在批处理文件中 或者 如果我可以指定一组候选值 例如 if 1 in 1 2 3 4 20 事实证明 and 很简单 只是不是你期望的语法 这3个例子就说明了这一点 换句话说 If 1 1
  • iPhone - UIImageView 中的中心 UIImage

    我有一个 UIImageView 我从 URL 获取 UIImage 图像显示在 UIImageView 中 但我无法使其正确居中 UIImage 为 80 x 68 像素 UIImaveView 的大小为 90 x 90 当我在 UIIm
  • 如何使用来自不同 ViewController 的 JSON 响应填充 UITableView?

    我在 stackoverflow com 上进行了谷歌搜索 但无法摆脱这种情况 如何使用 GET 的响应来填充 TableView 我发送 GET 并在 DetailViewController 我的主控制器 中的方法中解析响应 并希望使用
  • 选择 LINQ 中 JOIN 后的所有列

    我有两张桌子 Table1 and Table2 我想执行左外连接 var myOutput from object1 in Table1 join object2 in Table2 on object1 Property1 equals
  • 批处理文件日/月/年语法?

    我找不到用于提取当前日 月 年的批处理文件语法的简单细分 我有以下语法来声明用作目录名称的变量 set folder date 10 4 date 7 2 date 4 2 任何人都可以阐明 或发布链接 波浪号 双百分比的含义吗 我似乎无法
  • 在 Android 4.x 上 touchmove 后 Touchend 未触发?

    我正在用 Javascript 编写一些代码 如下所示 var el document getElementById some div el ontouchstart function e el innerHTML touch start
  • 处理具有共同属性但不同对象类型的对象的方法

    我有大量自动生成的对象 尽管它们都是不同的 不相关的类 但所有对象都共享一些基本属性 名称 id 等 我无法控制这些对象的生成 因此不幸的是我无法采取实现接口的理想方法 我想创建一种方法 在其中传递这些对象中的任意一个 并使用这些公共属性执