【发布时间】:2021-08-04 07:45:19
【问题描述】:
我正在尝试读取一个包含 5 列(int、str、int、str、str)的 csv 文件:
1234, wef23, 1, Mary, Smith
1234, wef23, 1, Mary, Smith
并将它们添加到列表中:
private List<PermittedUsers> okUsers = new List<PermittedUsers>();
PermittedUsers 已定义:
class PermittedUsers : MonoBehaviour{
public int IdNum, part;
public string upi, firstName, lastName;
public PermittedUsers(int id, string up, int pt, string fname, string lname){
IdNum = id;
upi = up;
pt = part;
fname = firstName;
lname = lastName;
}
但是,在导入之后,firstName 和 lastName 都为 null,part 为默认的 0 值。但是,upi(作为字符串)和 IdNum(作为 int)都按预期添加到列表中。导入代码为:
// import 5 column csv: ID, UPI, yearLevel, First, Last
var dataset = Resources.Load<TextAsset>("permittedUsers"); // this is loading the file in Unity without System.IO
var dataLines = dataset.text.Split('\n');
for(int i = 1; i < dataLines.Length-1; i++) { // skip header line and last empty line
var data = dataLines[i].Split(',');
okUsers.Add(new PermittedUsers(int.Parse(data[0]), data[1], int.Parse(data[2]), data[3], data[4].Replace("\r", string.Empty)));
}
调试和检查数据我可以看到它返回一个具有正确值的字符串[5](作为字符串)。
我对这里的不一致感到最困惑,为什么 upi 而不是 fname 会正确添加到列表中?为什么是IdNum,而不是pt?它发生在 CSV 中的 all 行中,所以我不认为这是由于特殊字符造成的。我还缺少什么?
【问题讨论】:
-
看起来像一个错字.. 构造函数中的字符串分配应该反过来.. ;) 无论哪种方式... 禁止在
MonoBehaviour上使用new! 你确定它甚至应该是MonoBeuaviour吗?