如何返回空字符串?

时间:2012-11-21 18:26:48

标签: c# asp.net

我有以下getter和setter方法:

    private Ansprechpartner partner;
    public virtual Ansprechpartner Partner
    {

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

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

有没有办法做同等的事情,以便合作伙伴在(partner == null)时返回一个空字符串?

请帮忙

6 个答案:

答案 0 :(得分:3)

Ansprechpartner你自己的班级吗?

如果是,那么你可以回复自己对“空”的辩护Ansprechpartner

return Ansprechpartner.Empty;

然后定义空属性

public class Ansprechpartner
{

    public static Ansprechpartner Empty
    {
         get
         {

          //generate an empty Ansprechpartner and return it here

         }
    }

答案 1 :(得分:3)

你可以从Ansprechpartner覆盖ToString方法并使用这样的标志属性:

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

在你的getter中只返回一个新的Ansprechpartner类的空实例

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

在您的代码中,执行以下操作:

MyClass.Partner.ToString();

答案 2 :(得分:0)

你可以做点什么:

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

答案 3 :(得分:0)

如果您将退货类型从Ansprechpartner更改为object,则可以返回您希望从object派生的任何内容。但我强烈反对采用这种方法。如果您想重新考虑整个方法。

答案 4 :(得分:0)

您的属性实际上似乎不使用字符串,在这种情况下返回字符串将是一个错误。

但是,直接回答你关于如何返回字符串的问题,尝试这样的事情:

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

或者,更好的是:

get
{
    return partner ?? String.Empty;
}

答案 5 :(得分:0)

在我看来,有一种直截了当的方式可以得到你所要求的,即确保它在语法上是正确的:

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

方法是为类提供 implicict强制转换操作符。由于隐式转换运算符,String.Empty或“”可以自动转换为Ansprechpartner类型,那么它对于getter使用的sysntax是完全合法的。

但什么是 implicict强制转换运算符? 您甚至可以查看问题:How do I provide custom cast support for my class?了解更多详情。

但是,我更喜欢直接测试您的类的代码:用于成功测试它的代码如下:

    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;
        }
    }

我们也尝试反过来:感谢公共静态隐式运算符字符串(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;
    }
}

就是这样,如果没有解释某事,请留言。