如何修复在字符串向量中添加bool值的构造

时间:2019-05-01 10:20:35

标签: c#

我试图将结构更改为在向量中具有bool值。 split方法将“ ###”行分开,并且文本文件中包含对或错的语句。

[代码]

$ mysqlsh --sql
MySQL Shell 8.0.16

Your MySQL connection id is 2 (X protocol)
Server version: 5.7.26 MySQL Community Server (GPL)
No default schema selected; type \use <schema> to set one.

MySQL 127.0.0.1:15726+ SQL > SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 5.7.26    |
+-----------+
1 row in set (0.0004 sec)

MySQL 127.0.0.1:15726+ SQL > SELECT `id`, `json_data`
                          -> FROM `test`.`example_table`\G
*************************** 1. row ***************************
       id: 1
json_data: {"price": null, "sale_list": [{"id": "1234", "date": "April 29th 2019 21:20:50", "buyer": "SmackMe089", "item_desc": ""}]}
1 row in set (0.00 sec)

MySQL 127.0.0.1:15726+ SQL > \js
Switching to JavaScript mode...

MySQL 127.0.0.1:15726+ JS > util.importJson('/path/to/file/sample.json', {schema: 'test', table: 'example_table', tableColumn: 'json_data'});
Importing from file "/path/to/file/sample.json" to table `test`.`example_table` in MySQL Server at 127.0.0.1:15726

.. 1.. 1
Processed 204 bytes in 1 document in 0.0007 sec (1.36K documents/s)
Total successfully imported documents 1 (1.36K documents/s)

MySQL 127.0.0.1:15726+ JS > \sql
Switching to SQL mode... Commands end with ;

MySQL 127.0.0.1:15726+ SQL > SELECT `id`, `json_data`
                          -> FROM `test`.`example_table`\G
*************************** 1. row ***************************
       id: 1
json_data: {"price": null, "sale_list": [{"id": "1234", "date": "April 29th 2019 21:20:50", "buyer": "SmackMe089", "item_desc": ""}]}
1 row in set (0.0007 sec)
*************************** 2. row ***************************
       id: 2
json_data: {"price": null, "sale_list": [{"id": "1234", "date": "April 29th 2019 21:20:50", "buyer": "SmackMe089", "item_desc": ""}]}
2 rows in set (0.0006 sec)

从文本文件,标题,作者,类型,布尔语句中读取并将向量添加到列表中。然后,我会使用随机方法来挑选一本可用的随机书。

1 个答案:

答案 0 :(得分:1)

我是否假设您在尝试将string转换为bool到此行时遇到错误?

Biblotek.Add(new Novellsamling(vektor[0], vektor[1], vektor[2], vektor[3]));

构造函数期望bool。但是vektor[3]string。假设可以将输入数据 解析为bool,则必须对其进行解析。像这样:

var inne = false;
bool.TryParse(vektor[3], out inne);
Biblotek.Add(new Novellsamling(vektor[0], vektor[1], vektor[2], inne));

请注意,这不会执行任何错误检查。如果该值无法解析,它将以默认值false静默继续。要处理该错误,请检查TryParse的返回值:

var inne = false;
if (!bool.TryParse(vektor[3], out inne))
{
    // parsing failed, handle the error here
}
else
    Biblotek.Add(new Novellsamling(vektor[0], vektor[1], vektor[2], inne));

如果不能直接解析值 ,那么值是什么?例如,您可能具有文本值“ Y”和“ N”。在这种情况下,您可以进行自己的临时解析,例如:

var inne = vektor[3] == "Y";
Biblotek.Add(new Novellsamling(vektor[0], vektor[1], vektor[2], inne));

如何根据字符串值定义真/假值的逻辑以及如何处理与逻辑不直接匹配的值的逻辑由您决定。 (使用默认值,引发错误等)。但是最终,您需要从bool派生一个string并将其传递给构造函数。


此外,此方法是一个错误,但也是不必要的,应完全删除:

public bool ToString(bool inne)
{
    return inne;
}

真正的ToString方法需要进行简单的校正才能构建返回的字符串:

public override string ToString()
{
    return title + " " + author + " " + typ + " " + inne.ToString();
}

甚至更好:

public override string ToString()
{
    return $"{title} {author} {typ} {inne}";
}