2012-04-15 4 views
1

Мы все знаем эту вещьметод Анализировать для пользовательского класса C#

bool.Parse(Session["foo"].ToString()) 

Как реализовать тот же PARSE метод для некоторого пользовательского класса?

Так что, если у меня есть

class MyClass 
{ 

} 

Можно было бы сделать как

MyClass.Parse(Session["foo"]) 
+0

Какая проблема именно вы сталкиваетесь? Что мешает вам просто написать метод 'Parse()'? – svick

+0

ну, мне нужен синтаксис вроде MyClass.Parse (Session ["foo"]), а не как MyClass newclass = new MyClass(); newclass.Parse (Session ["foo"]) –

+0

И почему бы вам не прямо хранить 'MyClass' в' Session'? – svick

ответ

5

Все, что вам нужно сделать, это написать статический метод Анализировать() для вашего класса, который принимает строку и создает с ним экземпляр MyClass.

public class MyClass 
{ 
    public static MyClass Parse(string input) 
    { 
     if(String.IsNullOrWhiteSpace(input)) throw new ArgumentException(input); 

     var instance = new MyClass(); 

     // Parse the string and populate the MyClass instance 

     return instance; 
    } 
} 
+0

Спасибо! Ваше решение было первым, и оно было простым. –

2
public Class MyCustomClass{ 
    public static MyCustomClass Parse(string str){ 
     if (str == "Whatever"){ 
      return new MyCustomClass(); 
     } 
     else if (/*other conditions*/) { 

     } 
    } 
} 

Или, там еще что-то вы не поняли?

2

Вы можете попробовать что-то вроде этого.

 public static MyCustomClass Parse(object o) 
    { 

     if (o == null) 
      return null; 

     try 
     { 
      if (o is MyCustomClass) 
       return (MyCustomClass)o; 
     } 
     catch 
     { 
      return null; 
     } 
     return null; 

    } 
1

Абсолютно - Вы должны были бы написать умеренное количество кода для его реализации, но вы, конечно, можете сделать это вручную, если необходимо:

public class MyClass { 
    public string First {get; private set;} 
    public string Last {get; private set;} 
    public MyClass(string first, string last) { 
     First = first; 
     Last = last; 
    } 
    public static bool Parse(string s, out MyClass res) { 
     res = null; 
     if (s == null) return false; 
     var tokens = s.Split(new[] {';'}); 
     if (tokens.Length != 2) return false; 
     res = new MyClass(tokens[0], tokens[1]); 
     return true; 
    } 
} 

Эта версия принимает выходной аргумент и возвращает bool ; вы можете легко изменить его, чтобы выбросить исключение и вернуть MyClass «стиль метода фабрики».

1
public class foo 
{ 
public static foo Parse(object obj) 
{ 
    return new foo(obj); 
} 

public foo(){} 

public foo(object obj) 
{ 
    //your code to parse from obj to foo.. 
} 
} 

в вашем '/ внешней рамной' Код:

var t = foo.Parse(someInstance); 
Смежные вопросы