我有以下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)
时返回一个空字符串?
请帮忙
答案 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;
}
}
就是这样,如果没有解释某事,请留言。