如何在包含一个变量的类中使用多个属性?

时间:2012-07-10 09:38:17

标签: c# .net properties enums

我的名为“config”的类具有名为“param”的私有字符串变量。

我需要从“config”类“param”变量获取有时作为int类型有时作为bool类型或字符串。

据我所知,我需要在config类中创建3个属性,每个属性都必须转换类型,如下所示:

第一个属性将字符串转换为int,第二个属性将字符串转换为bool,第三个属性为我获取字符串值。

该课程应如下所示:

class Config
{
    private string param; 

   public int ParamAsInt
  {
    get 
    { 
        return int.Parse(param); 
    }
  }

  public bool ParamAsBool
  {
    get 
    { 
        return bool.Parse(param); 
    }
  }

  public string ParamAsString
  {
    get 
    { 
        return param; 
    }
  }

}

但我不知道如何根据我想要离开课堂的变量类型来使用这些属性。

2 个答案:

答案 0 :(得分:4)

此代码无法编译 - int,这些是保留关键字,不能用作标识符。您可以尝试将您的属性命名为Int32ValueStringValue等,或尝试以下操作:

public static implicit operator bool (Config config)
{
    return bool.Parse(config.param);
}

public static implicit operator int (Config config)
{
    return int.Parse(config.param);
}

这将允许更清晰的代码:

Config c = GetConfig("foo");
var isFeatureEnabled = false || c;
var spacing = 23 + GetConfig("bar");

答案 1 :(得分:1)

您忘记提供属性名称。您期望如何参考它们?像这样:

class Config
{
    private string param; 

    public int ParamAsInt
    {
        get 
        { 
            return int.Parse(param); 
        }
    }

    public bool ParamAsBool
    {
        get 
        { 
            return bool.Parse(param); 
        }
    }

    public string ParamAsString
    {
        get 
        { 
            return param; 
        }
    }
}

请注意,我还在您对.Parse()的通话中修复了外壳。 C#区分大小写。我还将bool.TryParse()的号码替换为bool.Parse()。前者(如果使用正确,这不是因为它缺少一个参数)只会告诉你bool,它不会告诉你bool实际上具有什么价值。 (例如,bool.TryParse('false' out someBool)将返回true。)

当然,这段代码有点危险。你想要从更多的防御性编程开始来检查这些值。基本上,查找TryParse()以及如何正确使用它。像这样的东西,例如:

public int ParamAsInt
{
    get 
    { 
        var tmp = default(int);
        if (int.TryParse(param, out tmp))
            return tmp;
        else
            // do something else? throw a specific exception? 
    }
}

此外,此代码的目的是什么?这似乎是一个非常匆忙和糟糕的设计。对于param的任何给定值(顺便说一下,甚至设置怎么样?),这只是随机尝试为它公开类型属性。如果您猜对了,那么您仍然会留下其他会抛出异常的人。当然,有一种很多更清洁的方式来完成你想要做的事情。那么你想要做什么