2

私は次のゲッターとセッターメソッドを持っています:

    private Ansprechpartner partner;
    public virtual Ansprechpartner Partner
    {

        get
        {
            if (partner == null)
            {
               // something like partner = " ";
            }
            return partner;  
        }
        set
        {
            partner = value;
        }
    }

if 句で、partner = " " を設定したい。しかし、もちろん、これは機能しません。なぜなら、パートナーはクラス Ansprechpartner のタイプです。

次の場合にパートナーが空の文字列を返すように、同等のことを行う方法はありますか(partner == null)?

助けてください

4

6 に答える 6

3

Ansprechpartner の ToString メソッドをオーバーライドして、次のようなフラグ属性を使用できます。

public override ToString()
{
   if (FlagAtrribute == null) //Or if it is a string, you could String.IsNullOrEmpty(FlagAtrribute)
   {
      return "";
   }
   return FlagAtrribute.ToString();
}

ゲッターでは、Ansprechpartner クラスの新しい空のインスタンスを返すだけです。

get
{
   if (partner == null)
   {
       partner = new Ansprechpartner();
   }
   return partner;
}

そして、コードで次のようにします。

MyClass.Partner.ToString();
于 2012-11-21T18:39:44.470 に答える
3

Ansprechpartner自分のクラスですか?

そうであれば、「空」の独自の定義を返すことができますAnsprechpartner

return Ansprechpartner.Empty;

次に、空のプロパティを定義します

public class Ansprechpartner
{

    public static Ansprechpartner Empty
    {
         get
         {

          //generate an empty Ansprechpartner and return it here

         }
    }
于 2012-11-21T18:30:22.467 に答える
0

プロパティは実際には文字列を処理しているようには見えません。その場合、文字列を返すとエラーになります。

ただし、文字列を返す方法についての質問に直接答える場合は、次のようにしてみてください。

get
{
    if (partner == null)
        return String.Empty;
    else
        return partner;  
    }
}

または、さらに良い:

get
{
    return partner ?? String.Empty;
}
于 2012-11-21T18:31:44.383 に答える
0

私の意見では、あなたが求めるものを正確に取得する簡単な方法があります。つまり、次の構文が構文的に正しいことを確認することです。

get
{
    if (partner == null)
    {
       return = "";
    }
    return partner;  
}

その方法は、クラスに暗黙のキャスト演算子を提供することです。暗黙のキャスト演算子のおかげで、String.Empty または "" は Ansprechpartner 型に自動的にキャストできます。ゲッターに使用する sysntax は完全に合法です。

しかし、 暗黙のキャスト演算子とは何ですか? 「クラスにカスタム キャスト サポートを提供するにはどうすればよいですか?」という質問も見ることができます。詳細については。

ただし、クラスのコードを直接テストすることをお勧めします。正常にテストするために使用されるコードは次のとおりです。

    private  Ansprechpartner partner;
    public virtual Ansprechpartner Partner
    {
        get
        {    
            // legal assignment thanks to **public static implicit operator Ansprechpartner(string s)**
            return partner ?? String.Empty;            
        }
        set
        {
            partner = value;
        }
    }

また、逆も試みます: public static implicit operator string(Ansprechpartner a) のおかげで、空の文字列を Ansprechpartner インスタンス変数に割り当てることができることがわかります。

    public void test_method()
    {
        Ansprechpartner s = String.Empty;         
    }

Ansprechpartner クラスでは、キャスト演算子を定義します

class Ansprechpartner
{
    public static implicit operator Ansprechpartner(string s) {
        // put your conversion logic here 
        //    .. i.e: you can simply pass string s to a Ansprechpartner constructor
        Ansprechpartner a = new Ansprechpartner();
        return a;
    }

    public static implicit operator string(Ansprechpartner a)
    {
        if (a == null)
            return ""; 
        else 
            return a.ToString(); 
    }

    public Ansprechpartner()
    {
    }

    public override string ToString()
    {
        return Value;
    }
}

それだけです。何かが説明されていない場合は、コメントを残してください。

于 2012-11-24T07:42:43.377 に答える
0

次のようなことができます:

get
{
  if (partner == null)
    return new Ansprechpartner() {whatever = ""};
  else
    return partner;
}
于 2012-11-21T18:29:29.900 に答える
0

戻り値の型を から に変更するAnsprechpartnerobject、 から派生したものを何でも返すことができますobject。しかし、私はこのアプローチを取ることに強く反対します。再考したい場合は、アプローチ全体です。

于 2012-11-21T18:30:03.403 に答える