webForumDet fria alternativet

Collection av Color

.NET

5 svar · 229 visningar · startad av Nexus86

Medlem sedan okt. 20023 030 inlägg
Frågan#1

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.");
		}
	}
Medlem sedan apr. 2004778 inlägg
#2

Du skriver att

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.

Medlem sedan okt. 20023 030 inlägg
#3

Hmm. Kanske jag kan. Är rätt ny på .NET så jag vet inte men det stog att man kunde göra som jag skrev i manualen. Men kan testa iaf. :)

Medlem sedan okt. 20023 030 inlägg
#4

PDahlen skrev:

Du skriver att

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å?

Medlem sedan apr. 2004778 inlägg
#5

Ok, men jag förstår inte riktigt vad du tror att du ska uppnå med

 if (value.GetType() != Type.GetType("System.Drawing.Color"))

Om Type.GetType("SystemDrawing.Color") är null så gör du alltså en koll om value.GetType är null eller inte.
Jag ser inte riktigt logiken.

Det här borde vara mer rätt i så fall

 if ( !(value.GetType("System.Drawing.Color")) )

eller

 if ( !(value.GetType().ToString == "System.Drawing.Color") )
Medlem sedan okt. 20023 030 inlägg
#6

Jo i och för sig! Så mycket kan man alltså lita på manualen. :l

Tackar!

I och för sig gällde det en annan typ men iaf. :p

260 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)