.Net中不可变类型的示例

Nik*_*wal 9 .net c# vb.net immutability

我们知道不变性的概念,但除了需要知道几个不可变类型

  • 约会时间

还有更多吗?

sta*_*ica 14

下面是框架类库中的不可变类型列表.(随意扩展它!)

System.…

  • 所有原始值类型:( 注意:并非所有值类型都是不可变的!)
    • ByteSByte
    • Int16UInt16
    • Int32UInt32
    • Int64UInt64
    • IntPtr
    • Single
    • Double
  • Decimal
  • 编译器创建的所有匿名类型(new { ... }在C#中,New With { ... }在VB.NET中) (错误有两个原因:这些类型不在FCL中,显然VB.NET类型是可变的.)
  • 所有枚举类型(enum,Enum)
  • 所有代表类型.(请参阅此答案.虽然看起来代理可能是可变的(因为您可以执行类似的操作obj.PropertyChanged += callback,实际上obj.PropertyChanged是变异的引用指向新构造的委托实例;原始委托实例保持不变.)
  • DateTime,TimeSpan (在这个答案中提到)DateTimeOffset
  • DBNull
  • Guid
  • Nullable<T>
  • String
  • Tuple<…>.NET 4引入的类型(在本回答中提到)
  • Uri
  • Version
  • Void

System.Linq.…

  • Lookup<TKey, TElement>

  • 简单地说"所有值类型"+非值类型异常(例如String,Tuple和Uri)会不会更容易? (3认同)