webForumDet fria alternativet

case else funkar inte

.NETur .NET

11 svar · 377 visningar · startad av airwolf

airwolfMedlem sedan okt. 2003132 inlägg
#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
nitro2k01Medlem sedan aug. 20039 342 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?

airwolfMedlem sedan okt. 2003132 inlägg
#3

Samma sak, ingenting skrivs ut

nitro2k01Medlem sedan aug. 20039 342 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.

airwolfMedlem sedan okt. 2003132 inlägg
#5

Hur kommer man förbi detta?

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

nitro2k01Medlem sedan aug. 20039 342 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
...
airwolfMedlem 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
nitro2k01Medlem sedan aug. 20039 342 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.

airwolfMedlem 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

nitro2k01Medlem sedan aug. 20039 342 inlägg
#11

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

airwolfMedlem sedan okt. 2003132 inlägg
#12

Ja det har du ju rätt i!

nu är det ordnat, tack!

129 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)