Tag: 铸造

使用GetType()进行转换

是否可以将对象GetType()转换为从GetType()返回的类型? 我想要一个可以接受一个对象(对于匿名类型)的generics方法,但然后返回一个转换为匿名类型的对象。 我一直在考虑使用LCG DynamicMethod在容器类上构建一个方法,但我无法弄清楚它会是什么样子。 使用GetType()方法进行GetType()的想法是能够获取匿名类型并将对象强制转换为其实际类型,而无需实际知道类型。 最重要的目标是将匿名类型的对象粘贴到容器中,然后我可以在方法之间共享和传递。

枚举和表现

我的应用程序有很多不同的查找值,这些值永远不会改变,例如美国各州。 我想使用枚举,而不是将它们放入数据库表中。 但是,我确实意识到这样做需要一些枚举和大量的“int”和“string”来自我的枚举。 另外,我看到有人提到使用Dictionary 作为查找表,但枚举实现似乎更清晰。 所以,我想问一下,保留和传递很多枚举并将它们转化为性能问题,还是应该使用查找表方法,哪个表现更好? 编辑:需要转换为ID以存储在其他数据库表中。

为什么我不能将int转换为T,但是可以将int转换为object然后对象转换为T?

此代码无法编译: public T Get() { T result = default(T); if(typeof(T) == typeof(int)) { int i = 0; result = (T)i; } return result; } 但是,这段代码确实编译: public T Get() { T result = default(T); if(typeof(T) == typeof(int)) { int i = 0; result = (T)(object)i; } return result; } 代码也可以正常工作。 我不明白为什么编译器可以将对象(实际类型可以是任何东西)强制转换为T,但是不能将int(从对象中转移)转换为T.

为什么不能将Double隐式强制转换为Decimal

我不理解十进制和双精度的转换规则。 这样做是合法的 decimal dec = 10; double doub = (double) dec; 然而令我困惑的是,十进制是一个16字节的数据类型,double是8个字节,因此不会将一个双倍的十进制数转换为加宽的对话,因此应该隐式允许; 以上例子不允许?

为什么枚举需要显式转换为int类型?

这样做没有数据丢失,那么为什么必须明确地将枚举转换为整数? 如果它是隐含的,那么它是不是更直观,比如当你有更高级别的方法时: PerformOperation ( OperationType.Silent type ) 其中, PerformOperation调用一个被PerformOperation的包装C ++方法: _unmanaged_perform_operation ( int operation_type )

编译时和运行时转换c#

我想知道为什么在编译时检查C#中的某些转换,而在其他情况下,责任转储到CLR上。 如上所述都是不正确的,但以不同的方式处理。 class Base { } class Derived : Base { } class Other { } static void Main(string[] args) { Derived d = (Derived)new Base(); //Runtime InvalidCastException Derived d = (Derived)new Other(); //Compile-time Cannot convert type… } 在阅读“C#深度”时,我发现了有关此主题的信息,其中autor说: “如果编译器发现该转换实际上不可能工作,它将触发编译错误 – 如果理论上允许但在执行时实际上不正确,则CLR将抛出exception。” “理论上”是否意味着通过inheritance层次结构(对象之间的另一个亲和力?)连接,还是编译器的内部业务?