Можно ли привести строку в мой собственный тип? - PullRequest
2 голосов
/ 15 ноября 2011
public class Currency{
    private Code {get;set;}
    public Currency(string code){
      this.Code = code;
    }
    //more methods here
}

Я хочу, чтобы мой объект можно было касттировать

string curr = "USD";
Currency myType = (Currency)curr;

Я знаю, что могу сделать это с помощью конструктора, но у меня есть сценарий использования, где мне нужно привести объект без инициализации объекта...

Я также считаю, что мне нужна такая функция, как FromString(), чтобы сделать это
Спасибо.

Ответы [ 4 ]

6 голосов
/ 15 ноября 2011

Да, просто добавьте явный оператор приведения :

public class Currency {
    private readonly string code;
    public string Code { get { return this.code; } }
    public Currency(string code) {
        this.code = code;
    }
    //more methods here

    public static explicit operator Currency(string code) {
        return new Currency(code);
    }
}

Теперь вы можете сказать:

string curr = "USD";
Currency myType = (Currency)curr;
4 голосов
/ 15 ноября 2011

Добавьте этот метод к вашему классу валюты:

public static explicit operator Currency(String input) 
{
    return new Currency(input);
}

И назовите это так:

Currency cur = (Currency)"USD";
3 голосов
/ 15 ноября 2011

Если вы создаете свои собственные операторы приведения для вашего типа, вы можете сделать это возможным.

проверьте неявные и явные ключевые слова.

(в этом случае я бы предпочел явное приведение).

0 голосов
/ 15 ноября 2011

Я считаю, что этот оператор делает то, что вы хотите (как часть вашего класса валюты):

public static explicit operator Currency(stringvalue){
    return new Currency(value);
}
...