gpt4 book ai didi

c# - 仅在需要时加载类的 byte[] 属性

转载 作者:行者123 更新时间:2023-12-05 02:35:57 30 4
gpt4 key购买 nike

我有一个返回绑定(bind)到网格的列表的类。我的属性之一是一个 byte[] 数组,只有当有人双击包含该文件的网格单元格中的单元格时,它才应该被填充。此时,应该下载该文件并呈现给用户。只是一个带有文件名和 Process.Start(...

因为我将列表绑定(bind)到网格,它正在调用"file"属性并填充值,使其具有eager 类型的行为而不是lazy我正在寻找的行为。

有什么方法可以阻止此属性填充数据类(如下),而无需修改 UI 级网格以明确不读取文件列?

public class Errors
{
//...
private bool hasFile;
public bool HasFile { get { return HasFile; } }
private byte[] file;
public byte[] File
{
get
{
if (HasFile) { file = FileHelper.DownloadAndDecompress(this.ID, "ErrorsDownloadFile"); }
return file;
}
set { file = value; }
}

public static List<Errors> FindByAppName(string AppName, DateTime StartDate, DateTime EndDate) {/*...*/}
//...
}

我在 Lazy<T> 上做了一些阅读但是,我正在努力让它进入我的常规工作流程,因为当我实现它时,我无法将值分配给 setter 来进行文件上传...

尝试,但我无法将 byte[] 分配回 File 属性,因为它是只读的...

public bool HasFile { get { return HasFile; } }
public Lazy<byte[]> File
{
get
{
if (HasFile) { return new Lazy<byte[]>(() => FileHelper.DownloadAndDecompress(this.ID, "ErrorsDownloadFile")); }
else { return null; };
}
set { }
}

有关如何使用 Lazy<T> 正确实现惰性属性的任何提示或其他方法将不胜感激。

最佳答案

如果我没理解错的话,你想实现惰性下载,但急切上传

// Eager download (will be used in lazy download)
private byte[] DownLoad() {
// download here:
return FileHelper.DownloadAndDecompress(this.ID, "ErrorsDownloadFile");
}

// Lazy download ...
private Lazy<byte[]> m_File;

// ... which we assign in the constructor
public MyClass() {
...
m_File = new Lazy<byte[]>(Download);
...
}

// Our property
public byte[] File {
get {
// Lazy download
return m_File.Value;
}
set {
// we can't assign m_File.Value but we can recreate m_File
m_File = new Lazy<byte[]>(value);

//TODO: Upload here
}
}

关于c# - 仅在需要时加载类的 byte[] 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70384381/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com