2

我们都知道这件事

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

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

所以如果我有

class MyClass
{

}

有可能这样做

MyClass.Parse(Session["foo"])
4

5 回答 5

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;
    }
}
于 2012-04-15T14:55:49.377 回答
2
public Class MyCustomClass{
   public static MyCustomClass Parse(string str){
        if (str == "Whatever"){
             return new MyCustomClass();
        }
        else if (/*other conditions*/) {

        }
   }
}

或者,还有什么你不明白的吗?

于 2012-04-15T14:56:59.107 回答
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;

    }
于 2012-04-15T14:58:58.690 回答
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“工厂方法样式”。

于 2012-04-15T14:59:31.490 回答
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);
于 2012-04-15T15:04:49.900 回答