【发布时间】:2012-01-22 22:14:34
【问题描述】:
我想做的是这样的:
switch( myObject.GetType().GetProperty( "id") )
{
case ??:
// when Nullable<Int32>, do this
case ??:
// when string, do this
case ??:
// when Nullable<bool>, do this
object.GetType() 下的哪个路径将包含我可以使用 case 语句比较的数据类型的字符串名称?我需要知道类型,这样我才能拥有许多 Convert.ToInt32( string ) 之一,它将使用反射设置 myObject 的值。
【问题讨论】:
-
这几乎肯定是做错了。为什么不能利用多态性,而不是使用巨大的 switch 语句?
-
如果您建议创建多个具有不同参数类型的函数,我可以。在这种情况下,我将一组不同类型的属性从一个对象复制到另一个对象,其中一个对象始终是字符串类型。所以,我需要转换值来分配它。我对反射的经验很少。
-
@CodyGray 他可能正在做一些关于反射的事情,比如编写自己的 ORM。或者为所有这些 DAO 编写自定义序列化程序,你永远不会知道。
-
这就是为什么它是“几乎肯定”,而不是“肯定”。即使他正在做这些事情,也有争论为什么这些也是错误的。关于为什么 ORM 是一个糟糕的数据库模式已经写了很多,我看不出有什么令人信服的理由说明你不能编写一个使用多态类型的序列化程序。评论的目的是让 Zim 博士思考这是否真的是最好的选择,这就是为什么它是评论而不是答案。 @nawfal
-
@CodyGray 我明白你关于caution 的观点,虽然表达你的观点,但那里的“确定”感觉像是一个强有力的词。我不相信 ORM 很差(恰恰相反),并且可以看到自定义序列化实现在哪里需要这个。前几天我正在编写一个用于同步来自两个不同来源的数据的同步框架,如果你需要它快速而肮脏的话,我花更少的时间来思考成员,而不是去实现项目中所有类型的接口。沿着这些思路......当约定优于配置时......等等。到处都是 Shoehorning OOP 是一个坏主意。
标签: c# .net reflection typeof gettype