解析方法,我們都知道這件事情自定義類C#
bool.Parse(Session["foo"].ToString())
如何實現一些自定義的類相同PARSE方法?
所以,如果我有
class MyClass
{
}
這將有可能做這樣
MyClass.Parse(Session["foo"])
解析方法,我們都知道這件事情自定義類C#
bool.Parse(Session["foo"].ToString())
如何實現一些自定義的類相同PARSE方法?
所以,如果我有
class MyClass
{
}
這將有可能做這樣
MyClass.Parse(Session["foo"])
所有你需要做的是寫),爲你的類稱爲解析(靜態方法,它的字符串並用它創建一個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;
}
}
謝謝!你的解決方案是第一個,它是一個簡單的解決方案。 – 2012-04-15 15:11:10
public Class MyCustomClass{
public static MyCustomClass Parse(string str){
if (str == "Whatever"){
return new MyCustomClass();
}
else if (/*other conditions*/) {
}
}
}
或者是有別的東西,你不明白嗎?
你可以嘗試這樣的事情。
public static MyCustomClass Parse(object o)
{
if (o == null)
return null;
try
{
if (o is MyCustomClass)
return (MyCustomClass)o;
}
catch
{
return null;
}
return null;
}
絕對是 - 你需要編寫的代碼量適中,以實現它,但你一定可以做手工,如果你必須:
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
「工廠方法樣式」。
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);
究竟是什麼你面臨什麼問題?什麼阻止你簡單地寫'Parse()'方法? – svick 2012-04-15 14:54:59
以及我需要這樣的語法MyClass.Parse(Session [「foo」]),而不是像MyClass newclass = new MyClass(); newclass.Parse(Session [「foo」]) – 2012-04-15 14:56:29
爲什麼不直接在'Session'中存儲'MyClass'? – svick 2012-04-15 14:59:53