перегрузка / неявный оператор для «как» - PullRequest
7 голосов
/ 01 июня 2011
class Person
{
   string Name;
   int Age;
}

Я хочу иметь возможность неявно приводить строку в Person следующим образом:

var mrFoo = "Foo" as Person;

Я знаю, что могу сделать следующее, определив неявное приведение

Person mrFoo = "Foo";

НоЯ специально использую оператор "как"

Ответы [ 3 ]

20 голосов
/ 01 июня 2011

Нет, вы не можете этого сделать.Оператор «как» никогда использует пользовательские преобразования - только справочные преобразования и преобразования без распаковки.По сути, рассматриваемая ссылка уже должна быть правильного типа.

Лично я бы настоятельно посоветовал бы вам избегать операторов преобразования (особенно неявных) в подавляющем большинстве случаев.Как правило, метод преобразования более понятен, например, Person.FromString(...).

6 голосов
/ 01 июня 2011

Рассматривали ли вы использование параметризованного конструктора?

var mrFoo = new Person ("Foo");

4 голосов
/ 01 июня 2011

Нет необходимости использовать оператор 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";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...