我有这个班级
public class Item
{
public int Prop1 { get; set; }
public Item(string value)
{
int temp;
if (int.TryParse(value, out temp))
{
Prop1 = temp;
}
else
{
this = null;
}
}
}
但this = null;
无法编译。有可能做出这种行为吗?
Item foo = new Item("x"); //foo == null because "x" can't be parsed into int
答案 0 :(得分:2)
您可以创建静态方法来创建项目:
public class Item
{
public int Prop1 { get; set; }
public Item(int value)
{
Prop1 = value;
}
public static Item Create(string value)
{
int i;
return int.TryParse(value, out i) ? new Item(i) : null;
}
}
你可以打电话
Item foo = Item.Create("x");
如果您不希望用户使用int参数创建Items,那么将构造函数设为私有。这样,Item.Create(字符串值)将是用户能够创建Item实例的唯一方式。
答案 1 :(得分:1)
this
引用声明属性的类实例,不能使它自身为null。
如果你真的要求Prop有一个值,请创建一个带参数的构造函数,检查值是否解析为int(为什么它不能是int)并抛出异常(如果它不是
public class Item
{
public Item(string x){
if (!int.TryParse(value, out temp))
{
throw new ArgumentException("Give me an int to parse");
}
else
{
Prop1 = temp;
}
}
}
答案 2 :(得分:1)
不,您无法在该实例中将实例设置为null。
更好的选择可能是让另一个属性(或方法)指示您的类实例的有效性
public class Item
{
public int Prop1 { get; set; }
public bool IsValid{ get; set; }
public Item(string value)
{
int temp;
if (int.TryParse(value, out temp))
{
Prop1 = temp;
IsValid = true;
}
else
{
IsValid = false;
}
}
}
答案 3 :(得分:0)
但
this = null;
无法编译。是否有可能做出这种行为?
不,你不能在课堂上这样做。但是,您可以从那里设置任何属性。对于例如你可以做到
public int? Prop1 { get; set; }
并做
Prop1 = null;