我是 C# 的新手,我目前面临 1 个问题,试图检索我认为在 runtime 期间属于 object 类型的“数据”,因为此“数据”是从 EEG 设备收集的并流式传输到 Unity3D 平台。然后需要接收到的object中的这个特定“数据”来改变游戏对象(使用Unity3D)。
但是,从“EEG Device”公司提供的API插件列表来看,这个字符串“data”似乎存储在如下所示的
List<string> _streams
中:
public List<string> GetStreamsList()
{
List<string> _streams = new List<string>();
if(EEGToggle.isOn)
{_streams.Add("eeg"); //Adding this 'eeg' object data into the List}
if(PMToggle.isOn)
_streams.Add("met"); // the Main object that I want to access and retrieve specific data
... //many other object subscription that one can add/subscribe to
...
return _streams;
}
但是,在这个
_streams.Add("met")
里面,有一个ArrayList,用来输出几个数据布尔变量和它们在index+1
的值。
即:
"met": [false,null,false,null,null,false,null,true,0.266589,false,null,true,0.098421]
.
对所提供示例的一些见解:
true/false
表示某些指标与 API 之间的连接,而值 (null/ 0.xxxx)
表示在 true (connected)
时拾取的数据。
在这种情况下,通过查看最后 2 个索引
foc.isActive, value
,是否有办法 retrieve the value in the last index constantly then changing it's class **Object** to a
float variable` 因为最后一个索引处的这个值需要改变第一段中提到的游戏对象?
附加组件:Emotiv Unity 插件。
你在这个问题上使用的语言使它很难回答。 我从你的问题中得出的是,你正在寻找一种方法来查找列表中的最后一项并对其进行类型检查或尝试转换它。我可能误解了这个问题。
以下只是想法,请各位自行脑补。我建议将类似的东西放在函数中并递归调用它。
string lastItemInList = string.Empty;
var list = new List<string>();
if(list.Count > 0)
lastItemInList = list.Last();
bool boolResult;
var isBool = bool.TryParse(lastItemInList, out boolResult);
if(isBool) // denotes the connectivity between some metrics to the API
{
if (boolResult) // I assume 'true' means you're connected
{
// connected, so there might be new data in the list. Recursively call this function to get the next value and run the logic against it.
}
else // its false, you're not connected
{
// retry connectivity
}
}
else
{
// it's not a bool. So it could be "data that is picked up when it is true (connected)"
if(lastItemInList != null) // cast it to float and do what you want with float
{
float floatResult;
var isFloat = float.TryParse(lastItemInList, out floatResult);
if (isFloat)
{
// do what you need to do with the float value
}
//Note, there could be a else condition here if the data is a anomaly
}
else
{
// it's null, so you do nothing I assume
}
}
注意,当递归调用它时,只需确保添加带有等待的有限尝试逻辑,以在连接结果连续几次为 false 时停止重试。
在非结构化列表中存储数据不是最好的方法。我建议利用 C# 的面向对象功能,并尽可能更好地解析您的数据。