2010-01-14 5 views
0
public string AgentVersion 
    { 
    get { return m_version; } 
    } // property: Enabled 
    private string m_version = null; 

Le code de déclaration ci-dessous je l'ai fait dans le constructeurvaleur null vérification

string keySpoPath = SpoRegistry.SpoAgentRoot; 
    RegistryKey regkey = Registry.LocalMachine.OpenSubKey(keySpoPath); 
    m_version = (string)regkey.GetValue(SpoRegistry.regValue_CurrentVersion); 

ici sont mes doutes


  1. Ai-je besoin private string m_version = null; dans la déclaration de propriété dans ce contexte? Si j'enlève celui-là, y a-t-il des problèmes?

  2. Si AgentVersion est null ou non d'obtenir une valeur ou toutes les chaînes autres que les valeurs numériques que je veux attribuer AgentVersion à la valeur « 0.0.0.0 » sinon je afficher la valeur numérique qui vient. Est-ce code ci-dessous suffit ici string.IsNullOrEmpty(AgentVersion) ? "0.0.0.0" : AgentVersion; Si alors où et comment puis-je mettre en œuvre « propriété »

Répondre

0

1) Vous n'avez pas besoin d'instancier m_version comme nulle dans ce contexte. Vous n'avez généralement besoin de le faire lors de la déclaration d'une variable locale, pour éviter l'erreur de compilation 'Utilisation de la variable locale non affectée [name]'. Donc private string m_version; suffira.

2) Pour vérifier les valeurs nulles et vides, ce que vous avez avec String.IsNullOrEmpty() est correct. Si vous souhaitez vérifier les chaînes de retour de propriété dans le format correct, vous pouvez utiliser Regex.IsMatch() pour vous assurer que la propriété renvoie uniquement les chaînes au format de numéro de version.

[DefaultValue("0.0.0.0")] 
public string AgentVersion 
{ 
    get 
    { 
     return System.Text.RegularExpressions.Regex.IsMatch(m_version ?? String.Empty, @"\A\d+[.]\d+[.]\d+[.]\d+\z") 
      ? m_version 
      : "0.0.0.0"; 
    } 
} 

private string m_version; 

Mes expressions régulières sont un peu rouillés, de sorte que quelqu'un peut probablement améliorer ce que j'ai ici, mais c'est l'idée générale de ce que vous avez besoin.

1
  1. Vous pouvez utiliser ReSharper, il vous montrera où vous avez des déclarations redondantes. Dans ce cas, il est redondant.

  2. Si String.Empty est une valeur valide, vous pouvez le mettre en œuvre à l'aide

    public string AgentVersion { get { return m_version ?? "0.0.0.0"; } }

sinon vous utiliser correctement String.IsNullOrEmpty

public string AgentVersion 
{ 
    get { return String.IsNullOrEmpty(m_version) ? "0.0.0.0":m_version; } 
} 
2
  1. Comme toujours la valeur de m_version affecté dans la construction ou vous n'avez pas besoin de le régler sur null.
  2. get { return string.IsNullOrEmpty(m_version) ? "0.0.0.0" : m_version; }
1

vous pouvez utiliser ce code.

 

public string AgentVersion 
{ 
    get 
    { 
     if(string.isNullOrEmpty(m_version)) 
     { 
      string keySpoPath = SpoRegistry.SpoAgentRoot; 
      RegistryKey regkey = Registry.LocalMachine.OpenSubKey(keySpoPath); 
      m_version = (string)regkey.GetValue(SpoRegistry.regValue_CurrentVersion); 
     } 
      m_version = string.isNullOrEmpty(m_version) ? m_version : "0.0.0.0"; 
       return m_version; 
     } 

} 
string m_version; 
 
+0

chaîne m_version; ici je ne dois pas mettre la chaîne privée m_version; ????? – peter

+0

deux vérifications isNullOrEmpty sont là Est-ce nécessaire? – peter

+0

m_version = string.isNullOrEmpty (m_version)? m_version: "0.0.0.0 "; return m_version; doit être changé en m_version = string.isNullOrEmpty (m_version)?" 0.0.0.0 ": m_version; return m_version; rite ?? – peter