私たちは皆このことを知っています
bool.Parse(Session["foo"].ToString())
一部のカスタムクラスに同じPARSEメソッドを実装するにはどうすればよいですか?
だから私が持っているなら
class MyClass
{
}
のようにすることは可能だろう
MyClass.Parse(Session["foo"])
私たちは皆このことを知っています
bool.Parse(Session["foo"].ToString())
一部のカスタムクラスに同じPARSEメソッドを実装するにはどうすればよいですか?
だから私が持っているなら
class MyClass
{
}
のようにすることは可能だろう
MyClass.Parse(Session["foo"])
あなたがする必要があるのは、文字列を受け取り、それを使ってMyClassのインスタンスを作成するクラスのParse()と呼ばれる静的メソッドを書くことです。
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;
}
}
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 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);
もちろん - 実装するには適度な量のコードを書く必要がありますが、次のことが必要な場合は手動で行うことができます:
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
例外をスローして「ファクトリメソッドスタイル」を返すように簡単に変更できます。