小编Tom*_*ler的帖子

从解析字符串值的单行条件语句将null传递给DataTable

我有一个应用程序循环通过固定宽度的文本文件,将每一行读取到一个字符串变量并使用.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 …

.net c# datetime nullable system.data.datatable

17
推荐指数
2
解决办法
2万
查看次数

VS2010中的Assert.AreEqual()异常

我对单元测试相当新,并且正在使用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)

任何帮助将不胜感激!

.net unit-testing visual-studio-2010

3
推荐指数
1
解决办法
2035
查看次数

QBASIC:如果条件不满足则执行 GOTO 行

我正在将 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行的代码,或者跳过它?

任何方向将不胜感激...

c# gw-basic qbasic

1
推荐指数
1
解决办法
1226
查看次数