2

我有以下 getter 和 setter 方法:

    private Ansprechpartner partner;
    public virtual Ansprechpartner Partner
    {

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

在 if 子句中,我想设置合作伙伴 =“”。但这当然行不通,因为合作伙伴是一个典型的类 Ansprechpartner。

有没有办法做一些等效的事情,所以如果合作伙伴返回一个空字符串(partner == null)

请帮忙

4

6 回答 6

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 回答
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 回答
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 回答
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 类型,那么您用于 getter 的 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;
        }
    }

我们也尝试做相反的事情:由于 公共静态隐式运算符 string(Ansprechpartner a)我们看到可以将 Empty 字符串分配给 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 回答