2009-06-15 7 views
1

のようにプロパティを渡すことができます。 Person.Firstnameは関数を参照し、この参照型を通してPerson.Firstnameの属性を読み取ることができますか?プロパティを関数に渡した後、.NETでプロパティの属性を取得する場合は、

参照型は文字列だけでなく、PersonクラスのFirstnameプロパティも知っていますか?

TIA


私はjquery.autotabを使用し、属性に基づいてHtml.TextBox出力にjsの必要なコードを追加します私のasp.net MVCアプリケーションのための拡張機能を作成してみてください。

Class Person 
    <Autotab("text", maxlength:= 15)> _ 
    Property Firstname() as String 
    ... 
    End Property 
End Class 


<%= Html.TextBoxAutoTab("Person.Firstname", p.Firstname) %> 

ためTextBoxAutoTabの署名はさておき、「REFとして」問題(私のコメントを参照してください)対全参照型を残すこの

Public Function TextBoxAutoTab(ByVal h As HtmlHelper, ByVal name As String, ByRef value As Object) As String 
+0

あなたの質問タイトルと「参照タイプ」ごとに「as ref」(または「ref by」)を区別する必要があります。 2つは非常に異なっています。 –

答えて

2

のように見える、ない - 方法はありませんそれをパラメータとして受け取ったメソッド内で値がどこから来たのかを伝えることです。

は、代わりに(.NET 3.5では)式ツリーを渡してから、値を取得するためにツリーをコンパイル/実行し、その意味を理解するためにツリーを調べます。

しかし、これは本当にデザインの匂いです。なぜこれを知る必要がありますか?あなたは何を達成しようとしていますか?

編集:VBでの参照でプロパティを渡すと(C#では実行できません)、現行の値をローカル変数にコピーし、そのローカル変数を参照渡ししてコピーしますローカル変数の新しい値をプロパティに返します。呼び出されたコードには、もともとプロパティからのものであることが示されていません。

+0

私の質問が更新されました –

+0

はい、実際には差別化されずに「参照タイプ」と「参照」について話しています。 –

2

MVCの場合、Expressionアプローチは珍しいことではありません。このように、Expressionをそのような関数に渡して、値とメタデータ(属性)を取得する方法を示すコードの例を次に示します。 Expression<Func<object>>(または類似)ref引数を置き換えます。

(申し訳ありませんが、一例では、C#で - 私のVBがしようとするのに十分強力ではありません)

static void Main() 
{ 
    Person p = new Person { FirstName = "abc" }; 
    MyMethod(() => p.FirstName); 
} 
public static void MyMethod(Expression<Func<object>> expression) 
{ 
    object value = expression.Compile()(); 
    Console.WriteLine("value is: " + value); 
    switch (expression.Body.NodeType) 
    { 
     case ExpressionType.MemberAccess: 
      var me = (MemberExpression)expression.Body; 
      AutotabAttribute attrib = (AutotabAttribute) 
       Attribute.GetCustomAttribute(
        me.Member, typeof(AutotabAttribute)); 
      if (attrib != null) 
      { 
       Console.WriteLine("maxlength is: " + attrib.maxlength); 
       Console.WriteLine("text is: " + attrib.text); 
      } 
      break;     
     default: 
      throw new NotSupportedException("Expression is too complex"); 
    } 
} 

だからあなたはTextBoxAutoTabことの過負荷を記述する必要がありますByRefの代わりにExpression...をとり、上記のように評価してhtmlを適切に書き出します。

+0

thx私は今この方法で試してみます。 –

関連する問題