Jag försöker göra en Collection av Color-objekt men lyckas inget vidare. Jag har koden nedanför vilken jag personligen tycker ser rätt ut men när jag försöker lägga till ett värde i den så får jag ett felmeddelande ifrån OnValidate om att value är av fel typ vilket jag vet till 100% att det inte är eftersom jag försökte med det här:
ColorCollection cCol = new ColorCollection();
cCol.Add(Color.Black);
Har även provat att lägga till en MessageBox i OnValidate för att kolla vad jag får:
protected override void OnValidate(Object value)
{
[b] MessageBox.Show(value.GetType().ToString()); // Ger System.Drawing.Color
MessageBox.Show((Type.GetType("System.Drawing.Color") == null).ToString()); // Ger true[/b]
if (value.GetType() != Type.GetType("System.Drawing.Color"))
throw new ArgumentException("value must be of type System.Drawing.Color.");
}
Vad kan felet vara?
public class ColorCollection : CollectionBase
{
public System.Drawing.Color this[int index]
{
get
{
return ( (System.Drawing.Color) List[index]);
}
set
{
List[index] = value;
}
}
public int Add(System.Drawing.Color value)
{
return (List.Add(value));
}
public int IndexOf(System.Drawing.Color value)
{
return (List.IndexOf(value));
}
public void Insert(int index, System.Drawing.Color value)
{
List.Insert(index, value);
}
public void Remove(System.Drawing.Color value)
{
List.Remove(value);
}
public bool Contains(System.Drawing.Color value)
{
return (List.Contains(value));
}
protected override void OnInsert(int index, Object value)
{
if (value.GetType() != Type.GetType("System.Drawing.Color"))
throw new ArgumentException("value must be of type System.Drawing.Color.", "value");
}
protected override void OnRemove(int index, Object value)
{
if (value.GetType() != Type.GetType("System.Drawing.Color"))
throw new ArgumentException("value must be of type System.Drawing.Color.", "value");
}
protected override void OnSet(int index, Object oldValue, Object newValue)
{
if (newValue.GetType() != Type.GetType("System.Drawing.Color"))
throw new ArgumentException("newValue must be of type System.Drawing.Color.", "newValue");
}
protected override void OnValidate(Object value)
{
if (value.GetType() != Type.GetType("System.Drawing.Color"))
throw new ArgumentException("value must be of type System.Drawing.Color.");
}
}
MessageBox.Show(value.GetType().ToString()); // Ger System.Drawing.Color
MessageBox.Show((Type.GetType("System.Drawing.Color") == null).ToString()); // Ger true
Men vad ger Type.GetType("System.Drawing.Color") för värde?
MessageBox.Show(value.GetType().ToString()); // Ger System.Drawing.Color
MessageBox.Show((Type.GetType("System.Drawing.Color") == null).ToString()); // Ger true
Men vad ger Type.GetType("System.Drawing.Color") för värde?
Kan du inte använda
if (value.GetType() is System.Drawing.Color)
För att kolla att det är rätt datatyp.
Det fungerade inte. Först får jag en varning (warning CS0184: Angivet uttryck får aldrig typen (System.Drawing.Color)) sen blir det förbjuden åtgärd när jag kör programmet.
Men enligt min MessageBox så ger ju Type.GetType("System.Drawing.Color") värdet null. D.v.s ingenting. Något annat sätt jag kan lösa detta på?