82

私が持っているとしましょう:

public class Bob
{
    public int Value { get; set; }
}

Valueメンバーを次のようなoutパラメーターとして渡したい

Int32.TryParse("123", out bob.Value);

しかし、 「'out'引数は変数として分類されていません」というコンパイルエラーが発生します。 これを達成する方法はありますか、それとも変数を抽出する必要がありますか?

int value;
Int32.TryParse("123", out value);
bob.Value = value;
4

2 に答える 2

85

自動実装されたプロパティの代わりに、フィールドと「通常の」プロパティを明示的に使用する必要があります。

public class Bob
{
    private int value;
    public int Value
    { 
        get { return value; } 
        set { this.value = value; }
    }
}

次に、フィールドをoutパラメータとして渡すことができます。

Int32.TryParse("123", out bob.value);

しかしもちろん、フィールドはプライベートであるため、同じクラス内でのみ機能します(そしてそうあるべきです!)。

プロパティでは、これを実行できません。参照によってプロパティを渡したり、outパラメータとして使用したりできるVBでも、基本的に追加の一時変数があります。

の戻り値を気にしない場合はTryParse、いつでも独自のヘルパーメソッドを作成できます。

static int ParseOrDefault(string text)
{
    int tmp;
    int.TryParse(text, out tmp);
    return tmp;
}

次に、以下を使用します。

bob.Value = Int32Helper.ParseOrDefault("123");

そうすれば、複数の場所でこれを行う必要がある場合でも、単一の一時変数を使用できます。

于 2009-09-02T21:34:02.260 に答える
8

あなたはそれを達成することができますが、プロパティではできません。

public class Bob {
    public int Value { get; set; } // This is a property

    public int AnotherValue; // This is a field
}

で使用することはできませんがout、で使用ValueできますAnotherValue

これはうまくいくでしょう

Int32.TryParse("123", out bob.AnotherValue);

ただし、一般的なガイドラインでは、クラスフィールドを公開しないように指示されています。したがって、一時変数アプローチを使用する必要があります。

于 2009-09-02T21:35:34.880 に答える