gpt4 book ai didi

c# - C# 中正确的可空类型检查?

转载 作者:太空狗 更新时间:2023-10-30 00:37:04 24 4
gpt4 key购买 nike

好吧,我的实际问题是:我正在实现一个 IList<T> .当我到达 CopyTo(Array array, int index) ,这是我的解决方案:

void ICollection.CopyTo(Array array, int index)
{
// Bounds checking, etc here.
if (!(array.GetValue(0) is T))
throw new ArgumentException("Cannot cast to this type of Array.");
// Handle copying here.
}

这在我的原始代码中有效,并且仍然有效。但它有一个小缺陷,直到我开始为它构建测试时才暴露出来,特别是这个:

public void CopyToObjectArray()
{
ICollection coll = (ICollection)_list;
string[] testArray = new string[6];

coll.CopyTo(testArray, 2);
}

现在,这个测试应该通过了。它抛出 ArgumentException关于无法转换。为什么? array[0] == null . is检查设置为 null 的变量时,关键字始终返回 false .现在,出于各种原因,这很方便,包括避免空引用等。我最终想出的类型检查是这样的:

try
{
T test = (T)array.GetValue(0);
}
catch (InvalidCastException ex)
{
throw new ArgumentException("Cannot cast to this type of Array.", ex);
}

这不是很优雅,但它确实有效...不过还有更好的方法吗?

最佳答案

Type 上有专门针对这个的方法,试试:

if(!typeof(T).IsAssignableFrom(array.GetElementType()))

关于c# - C# 中正确的可空类型检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/169562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com