2012-07-10 72 views
1

我有名为“config”的类有一个名为“param”的私有字符串变量。如何使用包含一个变量的类中的多个属性?

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

据我了解,我需要创建配置类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; 
    } 
    } 

} 

但我不知道如何可以将这些属性按照到,我想离开类的变量类型中。

回答

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"); 
+0

至于上面提到的问题,他需要不止一个隐式转换,我认为C#不支持(*用户定义转换的评估从不涉及多于一个用户定义或提升的转换运算符。*) – V4Vendetta 2012-07-10 09:43:53

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.Parse()替换了致电bool.TryParse()。前者(当正确使用时,这不是因为它缺少一个参数)只会告诉你它是否 a 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(顺便说一下,这怎么可能是设置为),这只是随机尝试为其显示类型化属性。如果你猜对了,你仍然留下一些会抛出异常的东西。当然,有更多更清晰的方式来完成你想要做的事情。那么你试图做什么

相关问题