相关疑难解决方法(0)

C#中的拳击事件

我正在尝试收集C#中发生装箱的所有情况:

c# boxing value-type

82
推荐指数
2
解决办法
4007
查看次数

为什么我不能将int取消装入十进制?

我有一个IDataRecord reader我正在检索小数,如下所示:

decimal d = (decimal)reader[0];
Run Code Online (Sandbox Code Playgroud)

由于某种原因,这会抛出一个无效的强制转换异常,说"指定的强制转换无效".

当我这样做reader[0].GetType()时告诉我它是Int32.据我所知,这应该不是问题....

我已经通过这个片段测试了这个,它运行得很好.

int i = 3750;
decimal d = (decimal)i;
Run Code Online (Sandbox Code Playgroud)

这让我头疼不已,想知道为什么它没有将读取器中包含的int取消装箱作为小数.

有谁知道为什么会这样?有什么微妙的我不见了吗?

c# int unboxing decimal

61
推荐指数
3
解决办法
2万
查看次数

将结构体转换为通用接口时是否存在Boxing/Unboxing?

可能重复:
结构,接口和拳击

来自MSDN:http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx

Boxing是将值类型转换为类型对象由此值类型实现的任何接口类型的过程.

但是通用接口呢?

例如,int派生自IComparableIComparable<int>.

假设我有以下代码:

void foo(IComparable value)    { /* etc. */ }
void bar(IComparable<T> value) { /* etc. */ }

void gizmo()
{
   int i = 42;

   bar(i); // is `i` boxed? I'd say YES
   foo(i); // is `i` boxed? I fear it is (but I hope for NO)
}
Run Code Online (Sandbox Code Playgroud)

bar(或任何采用非通用接口的功能)意味着会有拳击吗?

foo(或任何函数采用类型的通用接口)意味着将有拳击?

谢谢.

c# generics boxing

15
推荐指数
3
解决办法
5600
查看次数

是一个拳击转换接口?

我有一个IEntity接口

public interface IEntity{
    bool Validate();
}
Run Code Online (Sandbox Code Playgroud)

我有一个实现此接口的类Employee

public class Employee : IEntity{
    public bool Validate(){ return true; }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我有以下代码

Employee emp1 = new Employee();
IEntity ent1 = (IEntity)emp1; // Is this a boxing conversion?
Run Code Online (Sandbox Code Playgroud)

如果它不是拳击转换那么演员是如何工作的?

c# oop boxing

13
推荐指数
3
解决办法
2701
查看次数

为什么.Net引用类型中的接口?

为什么接口引用类型?据我所知,接口是类(或结构)之间的契约,那为什么它是一个类型呢?我原以为它既不是值类型也不是引用类型.

.net types interface reference

12
推荐指数
1
解决办法
2390
查看次数

标签 统计

c# ×4

boxing ×3

.net ×1

decimal ×1

generics ×1

int ×1

interface ×1

oop ×1

reference ×1

types ×1

unboxing ×1

value-type ×1