1

リフレクションを介してプロパティに値を割り当てる必要があります。これまでにテストしたすべてのケースで、タイプが。のケースを除いて問題ありませんSystem.Reflection.Missing。たとえば、これはクラスです。

public class SomeClass
{
    public System.Reflection.Missing MissingProp { get; set; }
}

そして、これはリフレクションを通じてプロパティに割り当てるコードです。

var inst = new SomeClass();
var prop = typeof (SomeClass).GetProperty("MissingProp");
prop.SetValue(inst, Missing.Value, null);

そして、これは私が受け取っている例外です:

System.ArgumentException: Missing parameter does not have a default value.
Parameter name: parameters
   at System.Reflection.MethodBase.CheckArguments(Object[] parameters, Binder binder, BindingFlags invokeAttr, CultureInfo culture, Signature sig)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.RuntimePropertyInfo.SetValue(Object obj, Object value, BindingFlags invokeAttr, Binder binder, Object[] index, CultureInfo culture)
   at System.Reflection.RuntimePropertyInfo.SetValue(Object obj, Object value, Object[] index)
   at ClassesWithNoProperties.Program.Main(String[] args) in D:\Documents\Documents\Visual Studio 2010\Projects\C#\ClassesWithNoProperties\ClassesWithNoProperties\Program.cs:line 24

プロパティに値を割り当てるために同じコードを使用する非常に多くのケースでライブラリをテストしましたが、これがそのSystem.Reflection.Missingような動作を観察している唯一のケース()です。

C#でこの種の割り当てを実現するにはどうすればよいですか?

4

1 に答える 1

0

エラーメッセージは非常に自明です。Missing.Valueは、オプションのパラメーターを持つメソッドのプレースホルダーとしてのみ使用できます。PropertyInfoを使用してインスタンスの値を設定するメソッドでそれを使用しようとしていることは、単に意味がなく、Missing.Valueはこれを認識しているため、例外をスローします。

不思議なことに、VB.Netはデフォルトのパラメータをサポートしているため、VB.Netを使用してこれを機能させることができます。C#はそうではありません。

于 2012-06-14T15:35:58.990 に答える