Laden...

System.NullReferenceException ???

Erstellt von SGT_BOB vor 18 Jahren Letzter Beitrag vor 18 Jahren 943 Views
S
SGT_BOB Themenstarter:in
125 Beiträge seit 2005
vor 18 Jahren
System.NullReferenceException ???

Hallo Leute.

Hab schon wieder ein Problem. 🙁
Diesmal aber eher allgemeiner Natur. 😁

Ich lese mit folgendem Code Bios-Daten in Variablen ein:


			try
			{
				foreach(ManagementObject mo in queryCollection)
				{
					_BiosCharacteristics	= ((UInt16[])mo["BiosCharacteristics"]);
					
					_BuildNumber			= mo["BuildNumber"].ToString(); // <-- Hier ist Zeile 76
					_Caption				= mo["Caption"].ToString();
					_CodeSet				= mo["CodeSet"].ToString();
					_CurrentLanguage		= mo["CurrentLanguage"].ToString();
					_Description			= mo["Description"].ToString();
					_IdentificationCode		= mo["IdentificationCode"].ToString();
					_InstallableLanguages	= ((UInt16)mo["InstallableLanguages"]);
					_InstallDate			= ((DateTime)mo["InstallDate"]);
					_LanguageEdition		= mo["LanguageEdition"].ToString();
					_Manufacturer			= mo["Manufacturer"].ToString();
					_ListOfLanguages		= ((string[])mo["ListOfLanguages"]);
					_Name					= mo["Name"].ToString();
					_OtherTargetOS			= mo["OtherTargetOS"].ToString();
					_PrimaryBIOS			= ((bool)mo["PrimaryBIOS"]);
					_ReleaseDate			= ((DateTime)mo["ReleaseDate"]);
					_SerialNumber			= mo["SerialNumber"].ToString();
					_SMBIOSBIOSVersion		= mo["SMBIOSBIOSVersion"].ToString();
					_SMBIOSMajorVersion		= ((UInt16)mo["SMBIOSMajorVersion"]);
					_SMBIOSMinorVersion		= ((UInt16)mo["SMBIOSMinorVersion"]);
					_SMBIOSPresent			= ((bool)mo["SMBIOSPresent"]);
					_SoftwareElementID		= mo["SoftwareElementID"].ToString();
					_SoftwareElementState	= ((UInt16)mo["SoftwareElementState"]);
					_Status					= mo["Status"].ToString();
					_TargetOperatingSystem  = ((UInt16)mo["TargetOperatingSystem"]);
					_Version				= mo["Version"].ToString();
				}
			
				InitBiosCharacteristicsValues();
				BiosInfoConsoleOutput();
			}
			catch(Exception e)
			{
				Console.WriteLine(e.ToString());
			}

Mit den meisten funktioniert das auch. Allerdings sind nicht immer Informationen vorhanden, was zur Folge hat das einigen Variablen NICHTS zugewiesen werden kann. Ich bekomme folgende Fehlermeldung:

System.NullReferenceException: Object reference not set to an instance of an obj
ect.
at SystemInfos.Bios.GetBiosInfo() in c:\dokumente und einstellungen\olli\eige
ne dateien\visual studio projects\wmi_tests\systeminfos\bios.cs:line 76

Wenn ich das richtig verstehe, ist es nicht möglich eine Objektreferenz auf Null zu setzen.(logisch 😉)
Aber was kann ich dagegen tun??? Vorher prüfen, aber wie???
Hab da iregendwie eine tierische Denkblockade.

PLZ HELP

SGT_BOB

*************************
Ich bin root, ich darf das... 😜
root>_
*************************

D
462 Beiträge seit 2005
vor 18 Jahren

Hallo!

So kommst du dein Problem in den Griff:

_BuildNumber = mo["BuildNumber"] == null ? "" : mo["BuildNumber"].ToString();

Wenn mo["BuildNumber"] nicht existiern, dann bekommst du einen Leerstring anstatt einer Null-Referenz.

Man kann schon null zuweisen, jedoch kannst du dann nicht mehr auf ToString() zugreifen, weil man ja auf nichts zugreifen kann, was nicht existiert.

mfg

S
SGT_BOB Themenstarter:in
125 Beiträge seit 2005
vor 18 Jahren

Hey Danke.

Werds mal so probieren. Habs jetzt erstmal so gemacht:


...
					if(mo["BuildNumber"] != null)
						_BuildNumber			= mo["BuildNumber"].ToString();
...

Funzt auch. Aber deine Art ist eleganter. 8)

Vielen Dank.

*************************
Ich bin root, ich darf das... 😜
root>_
*************************