You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何创建Lazy属性并传入当前类字符串属性?能否传入Name属性至Lazy BOM初始化?

嘿,这两个问题其实是一回事儿,我给你直接上代码示例,再讲清楚细节:

在C#中创建带当前类属性参数的Lazy属性

要实现这个需求,核心是利用Lazy<T>的工厂委托特性——它允许我们在初始化Lazy对象时,引用当前类的任意成员(包括你的Name字符串属性)。

完整代码示例

// 假设你的BOM类结构是这样的
public class Bom
{
    public string InstanceName { get; }

    // 构造函数接收字符串参数
    public Bom(string name)
    {
        InstanceName = name;
    }
}

public class MyClass
{
    // 你的目标字符串属性
    public string Name { get; set; } = "DefaultProductName";

    // 方式1:在构造函数中初始化Lazy
    public Lazy<Bom> LazyBomFromCtor { get; }

    // 方式2:在getter中延迟初始化(适合属性可能不被用到的场景)
    private Lazy<Bom> _lazyBomFromGetter;
    public Lazy<Bom> LazyBomFromGetter
    {
        get
        {
            if (_lazyBomFromGetter == null)
            {
                // 通过闭包捕获当前实例的Name属性,传给Bom的构造函数
                _lazyBomFromGetter = new Lazy<Bom>(() => new Bom(Name));
            }
            return _lazyBomFromGetter;
        }
    }

    public MyClass()
    {
        // 构造函数里同样可以直接引用Name属性
        LazyBomFromCtor = new Lazy<Bom>(() => new Bom(Name));
    }
}

关键细节说明

  • Lazy的初始化时机:Lazy<T>只会在你第一次访问它的Value属性时执行工厂方法(也就是() => new Bom(Name)这段代码)。这意味着如果你的Name属性在第一次访问LazyBom.Value之前被修改,Bom实例会使用修改后的Name值;但一旦Bom被初始化,后续修改Name不会影响已创建的Bom实例(因为Lazy只会初始化一次)。
    举个例子:
    var myObj = new MyClass();
    myObj.Name = "UpdatedProductName";
    var bom = myObj.LazyBomFromCtor.Value; // bom.InstanceName = "UpdatedProductName"
    
    myObj.Name = "AnotherName";
    var sameBom = myObj.LazyBomFromCtor.Value; // 还是同一个实例,InstanceName依然是"UpdatedProductName"
    

是否存在将Name属性传入Lazy BOM初始化的实现方式?

当然存在!上面的代码就是最直接的实现方式。只要在Lazy<T>的工厂委托(Func<T>)中引用当前类的Name属性,就能把它作为参数传递给Bom的构造函数。

如果需要每次都用最新的Name值?

如果你希望每次获取Bom实例时都使用当前最新的Name,那Lazy<T>就不适用了——因为它的核心是“延迟初始化且只初始化一次”。这种情况你可以直接写一个方法:

public Bom GetLatestBom()
{
    return new Bom(Name);
}

每次调用这个方法都会创建一个新的Bom实例,使用当前最新的Name值。

内容的提问来源于stack exchange,提问作者ehh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:18:51