我有一个应用程序循环通过固定宽度的文本文件,将每一行读取到一个字符串变量并使用.Substring()方法查找给定字段的数据.对于给定的字段,它检查内容是否只是空格,或者其中是否存在实际的"数据",即除了空格之外的任何内容.例如,如果存在数据,并且该数据表示日期,则对该数据运行DateTime.Parse()并将其传递到C#DataTable中的datetime类型的字段; 但是,如果没有数据 - 只是空格,我想简单地将空值传递给该字段.以下是一段代码来说明:
var dataTable = new DataTable();
dataTable.Columns.Add("Application_Date").DataType = Type.GetType("System.DateTime");
while (!sr.EndOfStream)
{
string row = sr.ReadLine();
if (row.Substring(0, 1) == "2" && row.Substring(42, 1) == "T")
{
DataRow dr = dataTable.NewRow();
dr["Application_Date"] = row.Substring(124, 8) != " " ?
DateTime.Parse(row.Substring(124, 4) +
"-" + row.Substring(128, 2) + "-" +
row.Substring(130, 2)) :
null as DateTime?;
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我尝试运行它时,它会抛出一个错误,说它想要一个DBNull(Cannot set Column 'Application_Date' to be null. Please use DBNull instead.)
但是当我尝试简单地传递一个DBNull时,它告诉我它无法在DateTime和DBNull(Type of conditional expression cannot be …
我对单元测试相当新,并且正在使用VS2010开发并运行我的测试.我有一个简单的测试,如下图所示,它简单地比较了2个System.Data.DataTableReader对象.我知道它们是相同的,因为它们都是使用相同的对象类型,相同的输入文件创建的,并且我已经验证了对象"看起来"相同.
我意识到我可能正在处理几个问题,一个是这是否正确使用Assert.AreEqual甚至是正确的方法来测试这个场景,另一个是我正在处理的主要问题,这就是为什么此测试因此异常而失败:
Failed 00:00:00.1000660 0 Assert.AreEqual failed.
Expected:<System.Data.DataTableReader>. Actual:<System.Data.DataTableReader>.
Run Code Online (Sandbox Code Playgroud)
这是失败的单元测试代码:
public void EntriesTest()
{
AuditLog target = new AuditLog();
target.Init();
DataSet ds = new DataSet();
ds.ReadXml(TestContext.DataRow["AuditLogPath"].ToString());
DataTableReader expected = ds.Tables[0].CreateDataReader();
DataTableReader actual = target.Entries.Tables[0].CreateDataReader();
Assert.AreEqual<DataTableReader>(expected, actual);
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激!
我正在将 GW-BASIC 代码转换为 C#,并且总体上在 BASIC 语言方面的经验非常有限。我试图了解 IF...THEN...GOTO 语句的行为方式。例如,我有以下声明:
85 IF M(3,1)>M(2,1) THEN 95
90 M(3,1)=M(3,1)+P2
95 Z1=R1*(90.567-41.685/M(2,3))
Run Code Online (Sandbox Code Playgroud)
我的问题是:如果不满足第85行的条件,它是否仍然执行第95行的代码,或者跳过它?
任何方向将不胜感激...