public object GetValue (int index)
{
if (Rank != 1)
- throw new ArgumentException (Locale.GetText ("Array was not a one-dimensional array."));
- if (index < GetLowerBound (0) || index > GetUpperBound (0))
+ throw new ArgumentException (SR.Arg_RankMultiDimNotSupported);
+
+ var lb = GetLowerBound (0);
+ if (index < lb || index > GetUpperBound (0))
throw new IndexOutOfRangeException (Locale.GetText (
"Index has to be between upper and lower bound of the array."));
- return GetValueImpl (index - GetLowerBound (0));
+ if (GetType ().GetElementType ().IsPointer)
+ throw new NotSupportedException ("Type is not supported");
+
+ return GetValueImpl (index - lb);
}
public object GetValue (int index1, int index2)
public void SetValue (object value, int index)
{
if (Rank != 1)
- throw new ArgumentException (Locale.GetText ("Array was not a one-dimensional array."));
- if (index < GetLowerBound (0) || index > GetUpperBound (0))
+ throw new ArgumentException (SR.Arg_RankMultiDimNotSupported);
+
+ var lb = GetLowerBound (0);
+ if (index < lb || index > GetUpperBound (0))
throw new IndexOutOfRangeException (Locale.GetText (
"Index has to be >= lower bound and <= upper bound of the array."));
- SetValueImpl (value, index - GetLowerBound (0));
+ if (GetType ().GetElementType ().IsPointer)
+ throw new NotSupportedException ("Type is not supported");
+
+ SetValueImpl (value, index - lb);
}
public void SetValue (object value, int index1, int index2)
{
public Object Current {
get {
- if (_index < 0) throw new InvalidOperationException(SR.InvalidOperation_EnumNotStarted);
- if (_index >= _endIndex) throw new InvalidOperationException(SR.InvalidOperation_EnumEnded);
+ if (_index < 0) throw new InvalidOperationException (SR.InvalidOperation_EnumNotStarted);
+ if (_index >= _endIndex) throw new InvalidOperationException (SR.InvalidOperation_EnumEnded);
+ if (_index == 0 && _array.GetType ().GetElementType ().IsPointer) throw new NotSupportedException ("Type is not supported");
return _array.GetValueImpl(_index);
}
}
Assert.AreEqual (10, ((object[])arr [i]).Length);
}
}
+
+ [Test]
+ public unsafe void PointerArraysBoxing ()
+ {
+ var x = new int*[10];
+ var e = x.GetEnumerator ();
+ e.MoveNext ();
+
+ Assert.Throws<NotSupportedException> (() => { var _ = e.Current; }, "#1");
+ Assert.Throws<NotSupportedException> (() => { var _ = x.GetValue (0); }, "#2");
+ Assert.Throws<NotSupportedException> (() => { x.SetValue (0, 0); }, "#3");
+ }
}
}