webForumDet fria alternativet
Logga in / Bli medlem

case else funkar inte

.NET

11 svar · 379 visningar · startad av airwolf

Medlem sedan okt. 2003132 inlägg
Trådstart#1

Jag har en kod som läser exif ur en bild.

Men ifall den inte hittar nåt ska case else spotta ur sig ett värde
det gör den inte av nån anledning.

Måste det finnas ett värde för att case else ska fungera?

Se nedanstående kod.

Ifall värdet är 7 då skickar den ut case else, men om värdet
är helt tomt skippar den case else.

             Case 37383 'Metering Mode
				strTemp = System.BitConverter.ToUInt16(objProp.Value, 0).ToString
				
				Select Case strTemp
					Case "1"
						strMeteringMode = "Average"
					Case "2"
						strMeteringMode = "Center Weighted Ave"
					Case "3"
						strMeteringMode = "Spot"
					Case "4"
						strMeteringMode = "Multi-Spot"
					Case "5"
						strMeteringMode = "Pattern"
					Case "6"
						strMeteringMode = "Partial"
					Case Else
						strMeteringMode = "Other"
				End Select
Medlem sedan aug. 20039 340 inlägg
#2
 
	Case 37383 'Metering Mode
		strTemp = System.BitConverter.ToUInt16(objProp.Value, 0).ToString

		if (strTemp)

			Select Case strTemp
				Case "1"
					strMeteringMode = "Average"
				Case "2"
					strMeteringMode = "Center Weighted Ave"
				Case "3"
					strMeteringMode = "Spot"
				Case "4"
					strMeteringMode = "Multi-Spot"
				Case "5"
					strMeteringMode = "Pattern"
				Case "6"
				strMeteringMode = "Partial"
				Case Else
					strMeteringMode = "Other"
			End Select
		else
			strMeteringMode = "(None)"
		endif

Kanske?

Medlem sedan okt. 2003132 inlägg
#3

Samma sak, ingenting skrivs ut

Medlem sedan aug. 20039 340 inlägg
#4

Jag tror följande är ditt problem: Bilden du försöker kolla har ingen meteringMode alls, alltså reagerar inte raden Case 37383, eftersom det inte alls finns något värde som har index 37383.
Detta kan du lätt kolla genom att lägga till msgbox "" direkt efter Case 37383
Visas ingen msgbox, så körs inte heller koden efteråt, och då är det inte konstigt att strMeteringMode inte får något värde.

Medlem sedan okt. 2003132 inlägg
#5

Hur kommer man förbi detta?

Medlem sedan okt. 2003132 inlägg
#6

Jag presenterar i form
<%=strMeteringMode%>

Man kanske skulle kunna sätta nån regel där ifall den är ingenting, skriv detta.

Nåt förslag?

Medlem sedan aug. 20039 340 inlägg
#7

Jagb tycker du ska sätta strMeteringMode (Och eventuella andra variabler som kan drabbas) till ett default-värde innan den yttre select'en.

 
strMeteringMode="(none)"
select case id_nånting
...
	Case 37383 'Metering Mode
		strTemp = System.BitConverter.ToUInt16(objProp.Value, 0).ToString

		if (strTemp)

			Select Case strTemp
				Case "1"
					strMeteringMode = "Average"
				Case "2"
					strMeteringMode = "Center Weighted Ave"
				Case "3"
					strMeteringMode = "Spot"
				Case "4"
					strMeteringMode = "Multi-Spot"
				Case "5"
					strMeteringMode = "Pattern"
				Case "6"
				strMeteringMode = "Partial"
				Case Else
					strMeteringMode = "Other"
			End Select
		else
			strMeteringMode = "(None)"
		endif
...
Medlem sedan okt. 2003132 inlägg
#8

Det gjorde saken biff!

            strMeteringMode="Unknown"    
            Case 37383 'Metering Mode
				strTemp = System.BitConverter.ToUInt16(objProp.Value, 0).ToString
				
				Select Case strTemp
					Case "1"
						strMeteringMode = "Average"
					Case "2"
						strMeteringMode = "Center Weighted Ave"
					Case "3"
						strMeteringMode = "Spot"
					Case "4"
						strMeteringMode = "Multi-Spot"
					Case "5"
						strMeteringMode = "Pattern"
					Case "6"
						strMeteringMode = "Partial"
					Case Else
						strMeteringMode = "Other"
				End Select
Medlem sedan aug. 20039 340 inlägg
#9

Kommentar...

Vet inte om du bara har klippt ut delar av källan, men att ha den direkt innan case på det viset som det ser ut nu är riskabelt, eftersom det förutsätter att case'n innan körs. Bättre är att ha det innan select istället.

Medlem sedan okt. 2003132 inlägg
#10

Du menar

            Case 37383 'Metering Mode
				strTemp = System.BitConverter.ToUInt16(objProp.Value, 0).ToString
            strMeteringMode="Unknown"  				
				Select Case strTemp
					Case "1"
						strMeteringMode = "Average"
					Case "2"
						strMeteringMode = "Center Weighted Ave"
					Case "3"
						strMeteringMode = "Spot"
					Case "4"
						strMeteringMode = "Multi-Spot"
					Case "5"
						strMeteringMode = "Pattern"
					Case "6"
						strMeteringMode = "Partial"
					Case Else
						strMeteringMode = "Other"
				End Select

Då skriver den inte ut nånting

Medlem sedan aug. 20039 340 inlägg
#11

Nej! Innan den select case som "Case 37383" tillhör.

Medlem sedan okt. 2003132 inlägg
#12

Ja det har du ju rätt i!

nu är det ordnat, tack!

263 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)