如何在构造函数中从列表返回对象

本文关键字:列表 返回 对象 构造函数 | 更新日期: 2023-09-27 18:02:31

我从一个列表中的数据库中检索了一个静态表。如果有人用一个ID调用该类的构造函数,构造函数会在列表中找到该对象并复制所有值。

public class MyClass
{
    public int Id { get; set; }
    public string Text { get; set; }
    public MyClass(int instanzId)
    {
        MyClass myClass = CachedList().Find(T => T.Id == instanzId);
        Id = myClass.Id;
        Text = myClass.Text;
    }
}

这将始终创建该对象的新实例。是否可以直接从列表中返回对象?这样的:

public class MyClass
{
    public int Id { get; set; }
    public string Text { get; set; }
    public MyClass(int instanzId)
    {
        this = CachedList().Find(T => T.Id == instanzId);
    }
}

我知道在静态方法中这很容易,但如何在构造函数中做到这一点?

如何在构造函数中从列表返回对象

不,不是通过构造函数。你可以通过方法来实现。例如工厂:

public MyClass FindOrCreate(int instanceId)
{
    MyClass obj = CachedList().Find(T => T.Id == instanzId);
    //create obj when it does not exist
    return obj;
}

将缓存封装到另一个轻量级类中:

  public class MyWrapClass {
    private MyClass m_Cache;
    public MyWrapClass() {
      m_Cache = CachedList().Find(T => T.Id == instanzId);
      ...
    }
    ...
    // implicit cast to MyClass if you want it 
    public static implicit operator MyClass(MyWrapClass value) {
      if (null == value)
        return null;
      else
        return value.m_Cache;
    }
  }
  ...
  // Or MyWrapClass test = new MyWrapClass();
  MyClass test = new MyWrapClass();