これが問題です:
typeof(x)
typeof
値を取得するメソッド呼び出しであるかのように演算子を使用しています。そうではありません。コンパイル時の型名または型パラメーター (またはDictionary<,>
、 またはなどのバインドされていない型) が必要void
です。
同じことがdefault
演算子で試行されます。
それが問題なのですが、何を達成しようとしているのかを知らなければ、実際に修正方法をアドバイスすることはできません. 次のようなものが必要な場合があります。
public static IEnumerable<T> SelectDefault<T>(this IEnumerable<T> source)
{
return source.Select(x => default(T));
}
次に、これ:
var abc = new[]{1,2,3,4}.SelectDefault().ToArray();
...int[]
すべての値がゼロになります。
編集:これで、より多くの情報が得られました。必要なものを提供するのが簡単になりました。これは、基本的に、Type
必要に応じてボックス化からデフォルト値を取得する方法です。
public static object GetDefaultValue(Type type)
{
// Non-nullable value types should be boxed, basically
if (type.IsValueType && Nullable.GetUnderlyingType(type) == null)
{
// Not the swiftest approach in the world, but it works...
return Activator.CreateInstance(type);
}
// Everything else defaults to null
return null;
}
したがって、次のようになります。
var defaults = fields.Select(field => GetDefaultValue(field.type));
(質問によるとどこfield
にありますFieldInfo
か-私は意図的にここに電話していませんGetType()
。)