2012-04-15 107 views
1

解析方法,我們都知道這件事情自定義類C#

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

如何實現一些自定義的類相同PARSE方法?

所以,如果我有

class MyClass 
{ 

} 

這將有可能做這樣

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

究竟是什麼你面臨什麼問題?什麼阻止你簡單地寫'Parse()'方法? – svick 2012-04-15 14:54:59

+0

以及我需要這樣的語法MyClass.Parse(Session [「foo」]),而不是像MyClass newclass = new MyClass(); newclass.Parse(Session [「foo」]) – 2012-04-15 14:56:29

+0

爲什麼不直接在'Session'中存儲'MyClass'? – svick 2012-04-15 14:59:53

回答

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

謝謝!你的解決方案是第一個,它是一個簡單的解決方案。 – 2012-04-15 15:11:10

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);