c# - 对象未填充来自 C# 扩展方法的值,但在扩展方法中具有值
问题描述
我实现了一个扩展方法来从 Excel 文件(.NET Framework 4.8 中的所有内容)中获取字段,但是该fields
对象没有填充方法Field
中的值Main()
,而它确实在扩展方法中具有值。有没有人看到任何问题?我在out
某处错过了钥匙吗?
恐怕有两个指向不同字段对象的引用/指针..
另外,我真的必须fields
在“应用”扩展方法之前实例化吗?
static void Main(string[] args)
{
Fields fields = new Fields(); // Fields is a class which implements IEnumerable<Field>
fields.ReadFromExcel(); // fields is still null here, despite having values within the extension method
}
扩展方法(简化)
public static class ExtensionMethods
{
public static void ReadFromExcel(this Fields fields)
{
ExcelConnector excel = new ExcelConnector();
fields = excel.ReadFields(); // fields is correctly populated with fields from Excel here
}
}
感谢您的任何见解:-)
更新
如果我更改fields = Processor.ReadFromExcel();
为
public static class Processor
{
public static Fields ReadFromExcel()
{
// ...
return excel.ReadFields;
}
}
它运作良好,但随后失去了扩展方法功能......
解决方案
当你这样做时:
Fields fields = new Fields(); // Fields is a class with implements IEnumerable<Field>
fields.ReadFromExcel();
您正在传递必须的fields
参考ReadFromExcel
。那么当你这样做时:
public static void ReadFromExcel(this Fields fields)
{
fields = null;
}
您只是在修改参数fields
指向的内容。您不会更改原始变量的引用。
虽然你可以这样做:
public static Fields ReadFromExcel(this Fields fields)
{
return new ExcelConnector().ReadFields();
}
// and
Fields fields = new Fields();
fields = fields.ReadFromExcel();
这在很大程度上浪费了最初的fields
分配。对于扩展方法,这也不是一个好的用法,因为您不是在扩展 Fields
,而只是创建一个全新的实例。这应该只是:
public static Fields ReadFromExcel()
{
ExcelConnector excel = new ExcelConnector();
return excel.ReadFields();
}
// and
Fields fields = ExtensionMethods.ReadFromExcel();
此外,很可能你不应该有一个Fields
类,你可以并且应该使用List<Field>
(或者IEnumerable<Field>
如果你不需要更改集合)。
推荐阅读
- angularjs - 从 AngularJs 转换为 Angular 2+
- database - 我应该使用 InfluxDB 或 Elasticsearch 或其他方法来存储网站的鼠标跟踪数据吗?
- javascript - Javascript regexp - 删除引号之间的空格
- angular - VSCode 终端中的“Ctrl + 单击以跟随链接”不会跳转到源文件但会打开新的浏览器选项卡
- php - 多维数组,同一个key的值求和
- ansible - 是否有一个 Ansible 模块可以帮助在启动后保存 iptables 配置
- php - 如何获取从未完成的数据
- intellij-idea - Intellij:“无法自动装配。有多个 'MyType' 类型的 bean”使用 @ConditionalOnProperty
- python - 谷歌分析查询与视图相关的维度和指标列表
- flutter - 定义floatingActionButtonLocation时如何使用堆栈添加FAB?