2012-01-13 9 views
0

バイトプロパティで問題が発生しました。 数値が減算されて0より下の数値が設定された場合、属性を0にします。値が負の場合は0にするbyteプロパティ?

私の問題はプロパティでは、計算が既に終了していて値が負ではない値フィールドしか得られないということです負の値はバイトの最大値から減算されます。

属性タイプをsbyteに変更することはオプションではありません。

明示的なセッターメソッドを記述せずにgetterプロパティを使用することなく、4を5から255にする方法はありますか? 、私は今、任意の負の値がされるため、上記のソリューションが動作しません実現

private int m_TestValue; 
    public byte TestValue 
    { 
     get 
     { 
      if (m_TestValue < 0) 
      { 
       return 0; 
      } 
      else 
      { 
       return (byte)m_TestValue; 
      } 
     } 
     set { 
      m_TestValue = value; 
     } 
    } 

更新 32bitkidへ

ありがとう:どのようにバッキングプロパティはintで、このような何か、について

+0

プロパティ型を 'int'オプションに変更していますか?これは.NETが一般的に行うことです。 – Ryan

+0

あなたは 'checked'キーワードを調べたいかもしれません。 –

+0

@minitech、 'int'は0の問題を解決しません。 @ 32bitkid、 'checked'は例外の問題を作り出します。 –

答えて

1

セッターに達する前に正の値に変換されます。

これを解決する唯一の方法は、割り当て前に値をチェックする以外に、プロパティのデータ型をintに変更することですが、目的の機能を提供するバイトプロパティを指定することです。例えば

public int TestValue {get; set; } 

    public byte TestValueAsByte 
    { 
     get 
     { 
      if (this.TestValue < 0) 
      { 
       return 0; 
      } 
      else 
      { 
       return (byte)this.TestValue; 
      } 
     } 
     set 
     { 
      this.TestValue = value; 
     } 
    } 
+0

この解決策は意味をなさない。 'foo.TestValue = 0; foo.TestValue - = 128; Assert.AreEqual(foo.TestValue、0); 'アサーションは実際には' 128'に等しいので失敗します。オーバーフローはプライベートm_TestValueの範囲外で発生し、+128のオーバーフロー値が割り当てられます。 –

+0

@ 32bitkid:それを指摘してくれてありがとう。バイトで作業することはめったにありませんので、暗黙的なオーバーフロー変換の程度はわかりませんでした。私は提案された解決策で答えを修正しました。 –

2

まず、一般的な一体型の使用のためにbyteを避けます。 intで動作する方が速く、より柔軟性があり、バイトをパックすればバイトはスペースを節約しますが、そのようなオブジェクトが何百万もある場合には、保存しても重要ではありません。

ここで、「減算された数値」がどこにあるかはわかりません。

陰性でないルールが状態の問題である場合(「実際はマイナスですが、0と表示されます。たとえば-3プラス2の場合は内部的に0と表示されます」)、次に縫合が起こる時点でその規則を適用する。

private void Subtract(int subtrahend) 
{ 
    value = Math.Max(value - subtrahend, 0); 
} 

それはゼロとしてbeinternally陰性で表示するかどうかは、単にゲッター

public byte ByteForSomeReason 
{ 
    get { return Math.Max(value, 0); } 
} 

または実際に、セッターでそうすることを行います。セッターが値を設定することに対してあなたは何を持っていますか、私はむしろそれがうまくいくと思っています。

関連する問題