如何检查系统::集合::ArrayList是否存在/为空
How do I check if System::Collections::ArrayList exists / is empty
我正试图用两个简单的访问器/赋值函数访问::Collections::ArrayList的句柄:
/** --------------------------------------------
* public accessor for RX message queue
* --------------------------------------------- */
System::Collections::ArrayList^ peak_lib::rx_queue(void)
{
return this->m_Queue_Mes_RX;
}
/** --------------------------------------------
* public mutator for RX message queue
* --------------------------------------------- */
void peak_lib::rx_queue( System::Collections::ArrayList^ inList )
{
if ( inList->Count != 0 ) // <-- error line
{
this->m_Queue_Mes_RX = inList;
}
}
我的编译器抛出An unhandled exception of type 'System.NullReferenceException' occurred in my.exe
,并补充说,当我试图访问->Count
属性(请参阅代码中的错误行)时,没有在对象上调用引用(翻译它),因为有人告诉我在这里检查inList变量是否存在。
当我使用C++/CLI Visual Studio 2008时,检查ArrayList
是否存在的正确方法(或者至少是更好的方法:D)是什么?
最初,在检查计数之前检查null
if (inList != nullptr)
{
if(inList->count)
{}
}
在实际访问其成员之前检查空指针。
if (inList)
{
if(inList->count)
{}
}
此外,正如Konrad在评论中所说,System::Collections::ArrayList已经过时,所以请尝试使用向量而不是
属性设置器应该将属性设置为传递的值,或者指示错误。有两种方法可以指示错误:抛出参数异常(常见)或将对象更改为无效状态,该状态将在未来对对象的操作中公开(罕见,例如,用于数据绑定的类)。
可能是将属性设置为null不应该是一个错误,但您的问题暗示您希望禁止这样做。因此,在需要非null列表的地方传递null是Bonehead异常。它应该在发布前进行更正,而不是被调用代码忽略或被调用代码"处理"。
这是这种情况下的检查:
if (inList == nullptr) throw gcnew ArgumentNullException(L"value");
另一方面,传递一个空列表似乎一点也不例外。您应该考虑接受一个空列表作为属性值。如果这没有意义,也许您应该在设计类时不使用读写属性,而是使用方法和只读属性等。
其他问题:
- 考虑
Systems::Collections::Generic::List<T>
而不是System::Collections::ArrayList
- 请考虑将列表公开为只读集合
相关文章:
- 处理多个异常集合的C++方法
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- 如何将ampl中的集合表示为c++中的向量
- 检查值是否在集合p1和p2中,但不在p3中
- 带过滤器的现代迭代c++集合
- 如何将结构插入到集合中并打印集合的成员
- 集合上的输出迭代器:assign和increment迭代器
- 如何将函数集合传递给客户端类,以便将它们当作客户端类本身的成员使用
- 实现一个在集合上迭代的模板函数
- 尝试使用集合函数时出现分段错误
- 互斥指针的集合
- c++找不到具有相同哈希的无序集合元素
- python集合的C++等价物是什么.计数器
- 如何在C++中递归地按相反顺序打印集合
- Python 集合.计数器,如何避免重复查找
- 如何写向量的无序向量集,即unordered_set<向量<向量<int>>集合?
- 从具有自定义排序的向量创建集合
- 显示字符串的集合和子集
- 如何检查系统::集合::ArrayList是否存在/为空
- C++中是否有像Java那样的ArrayList<String>集合?