你能用C#w/UWP制作一个不可变的结构吗?

你能用C#w/UWP制作一个不可变的结构吗?,c#,windows-runtime,uwp,immutability,C#,Windows Runtime,Uwp,Immutability,因此,最佳实践是在C#中生成不可变的结构 在UWP中,这不起作用,一个人会得到: error WME1013: 'Blah.Foo' contains non-public field 'System.Int32 Blah.Foo.bar'. Windows Runtime structures can contain only public fields. error WME1012: Type 'Blah.Foo' contains non-field member 'Blah.Foo.B

因此,最佳实践是在C#中生成不可变的结构

在UWP中,这不起作用,一个人会得到:

error WME1013: 'Blah.Foo' contains non-public field 'System.Int32 Blah.Foo.bar'.  Windows Runtime structures can contain only public fields.
error WME1012: Type 'Blah.Foo' contains non-field member 'Blah.Foo.Bar.get()'. Windows Runtime structures can contain only fields.
error WME1012: Type 'Blah.Foo' contains non-field member 'Blah.Foo..ctor(System.Int32)'. Windows Runtime structures can contain only fields.
error WME1012: Type 'Blah.Foo' contains non-field member 'Blah.Foo.Bar'. Windows Runtime structures can contain only fields.
所以,好吧,我明白了,公共UWP结构实际上是一种值类型,所以让我们进入基础

public struct Foo
{
    readonly public int Bar;
}
现在。。。。让我们初始化。。。使用对象初始值设定项

class FooTest
{
    public static void FooFunc()
    {
        var baz = new Foo { Bar = 2 };
    }
}
但是没有

error CS0191: A readonly field cannot be assigned to (except in a constructor or a variable initializer
是否有任何方法可以做到这一点,或者我是否应该执行以下操作之一:

  • 接受可变结构
  • 使用一个类

  • UWP不能为结构提供抽象,它们的工作方式与C程序中的工作方式相同。是的,这两种方法都可以。你的问题措辞有误导性:C#和UWP都没有对结构施加这种限制。强调在Windows运行时组件项目或类似项目中使用公共结构可能是有意义的。
    error CS0191: A readonly field cannot be assigned to (except in a constructor or a variable initializer