相关疑难解决方法(0)

不可变对象相互引用?

今天,我试图将我的头围绕在彼此引用的不可变对象上.我得出的结论是,如果不使用惰性评估,你不可能做到这一点,但在这个过程中我写了这个(在我看来)有趣的代码.

public class A
{
    public string Name { get; private set; }
    public B B { get; private set; }
    public A()
    {
        B = new B(this);
        Name = "test";
    }
}

public class B
{
    public A A { get; private set; }
    public B(A a)
    {
        //a.Name is null
        A = a;
    }
}
Run Code Online (Sandbox Code Playgroud)

我觉得有趣的是,我想不出另一种在尚未完全构造且包含线程的状态下观察A类对象的方法.为什么这甚至有效?有没有其他方法来观察未完全构造的物体的状态?

c# immutability

76
推荐指数
5
解决办法
4875
查看次数

在成员初始化程序中不能使用'this'吗?

这合法吗?它是否包含隐藏的错误或缺陷?Visual Studio不会给出任何错误或警告,但ReSharper会:

/// <summary>
/// immutable tuple for two
/// </summary>
public class Pair<TValue1, TValue2> : Singleton<TValue1>
{
    public TValue2 Value2 { get; private set; }
    public Pair(TValue1 value1, TValue2 value2, Func<Pair<TValue1, TValue2>, String> toStringFunc)
        : this(value1, value2, () => toStringFunc(this)) { } //Red light

}2> : Singleton<TValue1>
Run Code Online (Sandbox Code Playgroud)

c# lambda anonymous-methods

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

在Blazor组件中初始化对象

使用此Blazor组件:

@page "/counter"

<h1>Counter</h1>

<p>Current count: @_a.CurrentCount</p>

<button class="btn btn-primary" onclick="@_b.IncrementCount">Click me</button>

@functions {
    private readonly ClassA _a = new ClassA();
    private readonly ClassB _b = new ClassB(_a);

    class ClassA
    {
        public int CurrentCount { get; set; }
    }

    class ClassB
    {
        private readonly ClassA _classA;

        public ClassB(ClassA classA)
        {
            _classA = classA;
        }

        public void IncrementCount() => _classA.CurrentCount++;
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

错误CS0236字段初始值设定项无法引用非静态字段,方法或属性'__Counter._a'

此线程说明如何解决标准类中的此错误:

为什么不能在成员初始化程序中使用“ this”?

但是为此,它需要一个构造函数。

是否可以在Blazor组件中添加构造函数?

如何解决此错误?

.net c# blazor

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

标签 统计

c# ×3

.net ×1

anonymous-methods ×1

blazor ×1

immutability ×1

lambda ×1