相关疑难解决方法(0)

为什么我不能将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万
查看次数

.NET中的所有内容都是对象吗?

请帮助我们解决"几乎"的争议一切都是一个对象(Stack Overflow问题的答案作为一个新手,在学习C#之前有什么我应该注意的吗?).我认为就是这种情况,因为Visual Studio中的所有内容至少都显示为结构体.请张贴参考文献,以免它变成"现代傻瓜"(This American Life).

请注意,这个问题涉及C#,不一定是.NET,以及它如何处理引擎盖下的数据(显然它都是1和0).

以下是"一切都是对象"的评论:

  • 呃,不,不是. - Binary Worrier
  • 我想要一个例子...... - scotty2012
  • 是不是从基类型Object派生的一切? - rizzle
  • 大多数东西都是物品... - Omar Kooheji
  • 值类型,整数,双精度,对象引用(不是它们自己的对象)等不是对象.它们可以"盒装"看起来像对象(egiToString())但实际上它们是原始类型.将条目更改为"NEVERLY everthing is a object",我将删除downvote - Binary Worrier
  • 我很欣赏澄清.我认为你可以在C#中与int进行交互的最低级别是一个结构,它不是一个对象?- http://msdn.microsoft.com/en-us/library/ms173109.aspx - rizzle
  • Int32不继承自继承自Object的ValueType吗?如果是这样,尽管有这种行为,int也是一个对象. - 克里斯农夫
  • 不,int的boxed类型继承自ValueType,它继承自Object.它们不是传统意义上的对象,因为a)int不是对int的引用,IT是int.b)int不是垃圾收集.如果你声明一个Int32,那么这个int是堆栈上的4个字节,故事结尾 - Binary Worrier

对象的定义:"对象"作为类System.Object的继承者与"对象"作为类型与"对象"作为引用类型的实例."

c# object

48
推荐指数
7
解决办法
2万
查看次数

如何在没有装箱的情况下比较System.Enum和枚举(实现)?

我如何可以比较System.Enum一个enum没有拳击?例如,如何在不装箱的情况下使下面的代码工作enum

enum Color
{
    Red,
    Green,
    Blue
}

...

System.Enum myEnum = GetEnum(); // Returns a System.Enum. 
                                // May be a Color, may be some other enum type.

...

if (myEnum == Color.Red) // ERROR!
{
    DoSomething();
}
Run Code Online (Sandbox Code Playgroud)

具体而言,此处的目的不是比较基础值.在这种情况下,基础值并不重要.相反,如果两个枚举具有相同的基础值,则如果它们是两种不同的枚举,则不应将它们视为相等:

enum Fruit
{
    Apple = 0,
    Banana = 1,
    Orange = 2
}

enum Vegetable
{
    Tomato = 0,
    Carrot = 1,
    Celery = 2
}

myEnum = Vegetable.Tomato;
if (myEnum != Fruit.Apple) // ERROR! …
Run Code Online (Sandbox Code Playgroud)

c# enums

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

所有C#强制转换都会导致装箱/取消装箱

我很想知道C#中的所有演员阵容是否会导致拳击,如果不是,所有演员阵容都是昂贵的操作?

拳击和拆箱中获取的示例(C#编程指南)

    int i = 123;
    // The following line boxes i.
    object o = i;  
Run Code Online (Sandbox Code Playgroud)

这一行显然导致装箱(将int类型包装为一个对象).这是一项被认为是昂贵的操作,因为它会产生将要收集的垃圾.

那些来自2种不同类型的参考类型的演员表怎么样?那是多少钱?可以正确测量吗?(与前一个例子相比)

例如:

public class A
{
}

public class B : A
{
}

var obj = new B();
var obj2 = (A)obj; // is this an "expensive" operation? this is not boxing
Run Code Online (Sandbox Code Playgroud)

.net c# clr boxing

11
推荐指数
3
解决办法
2390
查看次数

如何将"int"分配给对象?

我们如何在.NET中为一个对象分配一个整数?

引用类型派生自System.Object,值类型来自System.ValueType.

那么,怎么可能呢?

.net c# types

9
推荐指数
5
解决办法
3万
查看次数

什么是引擎盖下的演员

可能重复:
C#"as"施放vs经典施法

我想知道当我做类似的事情时,.Net CLR的内幕会发生什么

object myObj = "abc";
string myStr = (string)myObj;

以及第二行与string myStr = myObj.ToString()或如何不同string myStr = myObj as string;

环顾四周我找到了泛型的答案,比如"编译器在那里插入代码",但我并不满意......我正在寻找演员机制的深刻内容......哦,编译器插入代码?给我看看!编译器优化代码?怎么样?什么时候?

请尽可能接近金属!

.net c# clr

8
推荐指数
1
解决办法
876
查看次数

这两个演员之间的区别

我真的不熟悉铸造.因此,您可以随意编辑或评论我的问题的更改.

假设我有一个实现接口的类:

public class Class1: Interface1
{
}
Run Code Online (Sandbox Code Playgroud)

这两者之间的区别是什么?:

Interface1 myObject = new Class1();
Run Code Online (Sandbox Code Playgroud)

Class1 myClassObject = new Class1();
Interface1 myObject = (Interface1) myClassObject;
Run Code Online (Sandbox Code Playgroud)

第一个也是铸造的一种形式吗?

编辑:

每个人做什么?

c# interface class object

3
推荐指数
1
解决办法
135
查看次数

标签 统计

c# ×7

.net ×3

clr ×2

object ×2

boxing ×1

class ×1

decimal ×1

enums ×1

int ×1

interface ×1

types ×1

unboxing ×1