自定义类C#的解析方法

时间:2012-04-15 14:52:44

标签: c#

我们都知道这件事

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

如何为某些自定义类实现相同的 PARSE 方法?

所以,如果我有

class MyClass
{

}

可以这样做

MyClass.Parse(Session["foo"])

5 个答案:

答案 0 :(得分:6)

您需要做的就是为您的类编写一个名为Parse()的静态方法,该方法接受String并使用它创建一个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;
    }
}

答案 1 :(得分:2)

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

        }
   }
}

或者,还有其他你不理解的东西吗?

答案 2 :(得分: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;

    }

答案 3 :(得分: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“工厂方法样式”。

答案 4 :(得分: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);