【发布时间】:2017-11-09 13:08:07
【问题描述】:
所以我偶然发现了以下内容:
Console.WriteLine(currentRow["Projekt"]);
Console.WriteLine($"{currentRow["Projekt"]}");
Console.WriteLine($"{(string)currentRow["Projekt"]}");
输出:
> Data that i want
> Namespace.ExcelDataField
> Data that i want
ExcelDataField 显然是我编写的一个类,用于帮助我从 Excel 表中读取数据。我试图通过 MoveFirst/Next 实现类似于 VBA 的 DAO 访问,并始终公开 1 行数据 (currentRow)。
我使用 ExcelDataField 类来封装来自我的 Excel 表的数据,因为读取时类型将为 dynamic。
public class ExcelDataField<T>
{
private Excel.Range m_XlRange;
private int m_Row;
private int m_Col;
public T Data
{
get
{
return (T)(this.m_XlRange.Cells[this.m_Row, this.m_Col] as Excel.Range)?.Value2;
}
set
{
this.m_XlRange.Cells[this.m_Row, this.m_Col] = value;
}
}
public ExcelDataField(Excel.Range range, int row, int col)
{
this.m_XlRange = range;
this.m_Row = row;
this.m_Col = col;
}
public static implicit operator T(ExcelDataField<T> dataField)
{
return dataField.Data;
}
}
目前,出于测试目的,我假设所有数据以后都可以轻松地作为字符串处理,因此我对此类 ExcelDataField : ExcelDataField<string> 进行了重载,这是我用来读取 Excel 工作表的类。在示例中,我只是将其读回控制台。
只要我不使用显然找不到我的隐式转换的插值字符串,一切都可以正常工作。我尝试将ExcelDataField : ExcelDataField<string> 更改为ExcelDataField : ExcelDataField<String>,但都不起作用。
据我了解,插值字符串使用 FormattableString 类型,它没有从字符串进行任何隐式转换或仅显式地转换字符串。
我的问题是谁能更详细地解释这里到底发生了什么?有没有一种干净的方法让我能够使用插值字符串?
【问题讨论】:
标签: c# excel string implicit-conversion string-interpolation