2016-07-27 5 views
-1

文字列が格納されている場合、その文字列をオブジェクト参照の一部としてどのように使用できますか?例えばMVCコントローラのオブジェクト/モデル参照/アドレスとして使用する文字列を変換するにはどうすればよいですか?

私は文字列として保存されたフィールド名を持っている場合、私はテーブルにそのフィールドを参照していたときにどのように私はその文字列を使用することができます。

string thisismystring = fieldname 

if (tablename.(this is where i want to use my string as a reference to the appropriate field) > 1) 
{ 
    Do something here 

} 

おかげ

+0

tablenameとは何ですか?シンプルなクラス?またはDataRow? – rene

+0

ちょうどクラス/モデル – Rob

答えて

2

あなたが本当にと思えばモデルの種類についてGetPropertyを呼び出して反射を使用し、返されたPropertyInfoでGetValueを呼び出す必要があります。 GetValueは、モデルタイプのインスタンスを取ります。

実現する戻り値はオブジェクトです。それを比較するには、キャストまたは変換する必要がありますが、それはあなたのロジックに依存します。

// if this is your model ... 
public class MyModel 
{ 
    public string FieldName {get;set;} 
} 

// this is what your Controler method would look like 
public ActionResult Check(string fieldname, string fieldValue) 
{ 
    var tablename = new MyModel{ FieldName = "check"}; 
    var prop = typeof(MyModel).GetProperty(fieldname); 
    var value = prop.GetValue(tablename); 

    // do notice value is here an Object, so you might want to Convert or Cast if needed 
    if (value == fieldValue) 
    { 
     "equal".Dump(); 
    } 
    return View(tablename); 
} 

// and this is how your Controller method gets called 
Check("FieldName","check"); 

反射にはパフォーマンス上のペナルティがあります。

+0

答えをありがとう、非常に単純なもののように思われるもののために非常に畳み込まれているように見えます。住所の一部として文字列を使用することはできませんか?私のコントローラーで効果的に意味するのは、フィールドを参照する単語を入力するだけです。フィールド1と呼ばれています。私の文字列にこのアドレスに 'field1'が含まれていれば、単純に私の文字列を使用するのは奇妙に思えます。 – Rob

+1

強く型付けされたシステムでは、無料で動的にすることはできません。型安全性が損なわれる。 – rene

関連する問題