Andy Lanng
Это сработает. Так ли это сейчас?
Лично я бы не стал делать это совсем так (но близко):
int?[] result = null;
var enumerable = propertyValue as IEnumerable;
// will be null if not IEnumerable. These checks are always valid
if(enumerable != null && enumerable.All(i=>i is int?) //or is INullable<int>. they should be the same
result = enumerable.Cast<int?>().ToArray()
return result;
Это вернет либо a int?[] или null.
Лично я бы добавил проверки, которые выбрасывают исключения, чтобы определить, почему я получаю null. В конце концов, это может быть другой объект или null int?[].
Это не сработало, так как "null is int?" всегда равно false.
Вместо этого замените на "i=>i==null | / i is int"
Вот полный модульный тест, который проходит:
[TestMethod]
public void TryPart1()
{
int?[] value = new int?[10];
for (int i = 0; i < value.Length; i++)
{
value[i] = (i > 4) ? (int?)null : 0;
}
object a = value;
var result = TryPart2(a);
Assert.IsTrue(result != null);
Assert.IsTrue(result.Length == 10);
}
public int?[] TryPart2(object a)
{
int?[] result = null;
var enumerable = a as IEnumerable;
if (enumerable != null)
{
var objects = enumerable.Cast<object>().ToArray();
if (objects.All(o => o==null || o is int))
result = objects.Cast<int?>().ToArray();
}
return result;
}
Member 11859517
Спасибо Энди Лэнг,
это не работает для меня давая ошибку
Необработанное исключение типа ' System.Которого вызывается invalidcastexception произошел в System.Core.dll
Дополнительная информация: указанное приведение недопустимо.