Tag: value type

列表与数组中的索引器

如何在列表和数组中定义索引器。 List lists=new List(); MyStruct是一个结构。 现在考虑MyStruct[] arr=new MyStruct[10]; arr[0]给出了对第一个Structure项的引用。但是lists[0]给了我一个副本。 是否有任何理由这样做。 此外,因为Int32是结构List list1 =new List(); 我怎么可能访问list1[0]或分配list1[0]=5 ,因为它不可能做lists[0]._x=5

CLR在调用struct的方法时如何工作

我想我已经知道了一堂课的答案,只想确认我的理解是正确的。 假设我有一个ClassA ,它的实例名为a 。 当调用a.MethodA() : (1)CLR通过堆中a的类型指针找到ClassA的类型 (类型已经加载到堆中) (2)在类型中找到MethodA ,如果找不到,则转到其基类型,直到object类。 也许我的理解不太准确,但我认为这是基本正确的(纠正我,如果它是错的!)。 这是一个简单结构的问题。 struct MyStruct { public void MethodA() { } } 我有var x = new MyStruct(); ,它的值在堆栈上, MyStruct的类型已加载到堆中。 当执行x.MethodA() ,当然没有拳击。 CLR如何找到MethodA并获取IL并执行/ JIT呢? 我认为答案可能是:(如果我错了,再次纠正我) (1)我们在堆栈上有x的声明类型 。 CLR通过堆栈上的信息找到它的类型,并在其类型中找到MethodA 。 – 让我们称之为assumptionA 如果你告诉我我的assumptionA是正确的,我会很高兴的。 但即使它是错的,它也说明了一个道理:CLR有一种方法可以在没有装箱的情况下找到结构类型。 那么x.ToString()或x.GetType()呢? 我们知道该值将被加框,然后它将像一个类一样执行。 但为什么我们需要拳击呢? 既然我们可以得到它的类型(假设A告诉我们),为什么不去它的基类型并找到方法(就像一个类)? 为什么需要昂贵的箱子操作呢?

如何使用.NET XmlSerializer使值类型为空?

让我们假设我有这个对象: [Serializable] public class MyClass { public int Age { get; set; } public int MyClassB { get; set; } } [Serializable] public class MyClassB { public int RandomNumber { get; set; } } XmlSerializer会像这样序列化对象: 0 4234 我怎样才能使该物业成为可空? IE:当它低于0时,没有序列化属性Age? 我尝试使用Nullable,但它将我的对象序列化为: 4234 通过阅读MSDN文档,我发现了这个: 您不能将IsNullable属性应用于键入为值类型的成员,因为值类型不能包含nullNothingnullptra null引用(在Visual Basic中为Nothing)。 此外,对于可为空的值类型,您不能将此属性设置为false。 当这些类型为nullNothingnullptra null引用(在Visual Basic中为Nothing)时,它们将通过将xsi:nil设置为true来序列化。 来源: http : //msdn.microsoft.com/en-us/library/system.xml.serialization.xmlelementattribute.isnullable.aspx 我理解值类型不能设置为null。 值类型始终设置为某个值。 […]