StringGet-only-Lambda属性是否总是返回一个新对象,或者它是缓存的



我有一个名为FileFilter的类。它是一个非常基本的类,其目标是促进为文件浏览对话框创建文件过滤器。


Class FileFilter{
Public Name { get; }
Public Extension { get; }
Public FileFilter => String.Format(“{0}{1}|{1}”, Name, Extension);
}

我预计不需要经常访问"FileFilter"属性(仅在使用对话框时(,但我认为我可以使用该对象来存储其他函数的字符串,例如DirectoryInfoGetFiles((可以接受文件扩展名。

所以我创建了一个带有各种对象的静态小类,比如"TextFile*.txt">

从理论上讲,我的问题是,在对象构造过程中为FileFilter生成字符串更有效,还是使用lambda表达式更有效?

如果在一行中多次使用lambda表达式,是创建了新实例,还是缓存了它?

我认为它会在第一次使用时创建一个新字符串,存储它并在运行时重用它,因为它总是生成相同的字符串,但实际上并不知道。OTOH,从技术上讲,它是一个每次都运行的函数,所以它每次都可能创建一个新的字符串对象。

我读过关于弦乐实习的文章,所以我很好奇这是怎么回事。

首先,=>在本例中不是lambda,它是只读属性的语法糖。这相当于

public string FileFilter
{
get
{
return String.Format("{0}{1}|{1}", Name, Extension);
}
}

如果在一行中多次使用lambda表达式,是创建新实例还是缓存它?

每次读取属性中的getter时都会对其求值。这意味着,如果多次调用FileFilterString.Format将运行多次。在String.Format中使用的两个值Name和Extension只能由构造函数设置。这意味着,一旦构造函数完成,FileFilter将返回不同的字符串对象,但无论您读取该属性多少次,每个对象都将具有相同的值。

在设置Name和Extension之后,您可以计算并在构造函数中缓存此值,也可以让这些琐碎的代码保持原样。这取决于您。

相关内容

最新更新