1

「param」という名前のプライベート文字列変数を持つ「config」という名前のクラスがあります。

「config」クラスの「param」変数から、時にはint型、時にはbool型または文字列として取得する必要があります。

私が理解しているように、構成クラスに3つのプロパティを作成する必要があるため、各プロパティは次のように型を変換する必要があります:

最初のプロパティは文字列を int に変換し、2 番目のプロパティは文字列を bool に変換し、3 番目のプロパティは文字列値を取得します。

クラスは次のようになります。

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

2 に答える 2

4

このコードはコンパイルintされません。これらは予約済みのキーワードであり、識別子として使用できません。Int32ValueプロパティにStringValue、 などの名前を付けるか、次のようにしてみてください。

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");
于 2012-07-10T09:40:36.350 に答える
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いる値は通知しません。(たとえば、が返されます。)boolbool.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(ちなみに、どのように設定されているのでしょうか?)、これは型指定されたプロパティをランダムに公開しようとします。正しいものを推測しても、例外をスローする他のものが残っています。確かに、あなたがやろうとしていることを達成するためのよりクリーンな方法がありますそれで、あなたは何しようとしていますか?

于 2012-07-10T09:49:23.120 に答える