'as'的重载/隐式运算符

时间:2011-06-01 15:57:42

标签: c# operator-overloading

class Person
{
   string Name;
   int Age;
}

我希望能够将字符串强制转换为Person,如下面的

var mrFoo = "Foo" as Person;

我知道我可以通过定义隐式转换

来执行以下操作
Person mrFoo = "Foo";

但我特意使用“as”运算符

3 个答案:

答案 0 :(得分:20)

不,你不能这样做。 “as”运算符从不使用用户定义的转化 - 仅引用转化和拆箱转化。基本上,有问题的参考文献必须是正确的类型。

对于绝大多数情况,我个人强烈建议你远离转换操作符(尤其是隐式操作符)。通常具有转换方法更清晰,例如Person.FromString(...)

答案 1 :(得分:6)

您是否考虑过使用参数化构造函数?

var mrFoo = new Person(“Foo”);

答案 2 :(得分:4)

无需使用as运算符,因为您可以使用implicit运算符执行此操作:http://msdn.microsoft.com/en-us/library/z5z9kes2(v=vs.71).aspx

这些方面应该有效:

public static implicit operator Person(string s)
{
  Person p = new Person() {Name = s};
  return p;
}

现在你可以做到:

Person p = "John Doe";