2017-05-28 34 views
0

如何在UWP中獲取內部參數化構造函數。在UWP中獲取內部構造函數

爲什麼在UWP中沒有such過載?

var ctr = typeof(T).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, 
            null, CallingConventions.HasThis, 
            new[] {typeof(IBuffer)}, null); 

唯一的過載,我可以在UWP稱這是

var ctr = typeof(T).GetConstructor(new[]{typeof(IBuffer)}); 

其中僅得到公共構造。我需要使用IBuffer參數獲得我的類的內部構造函數,並將它們緩存在委託引用中。

+0

你打我吧。我認爲你需要等待.net標準2.0的一些反思的東西。 –

回答

0

有一個我可以用來代替的GetConstructors方法。

var ctor = typeof(T).GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance) 
    .FirstOrDefault(c => 
     c.GetParameters() 
      .Select(x => x.ParameterType) 
      .SequenceEqual(new[] {typeof(IBuffer)})); 

var param = Expression.Parameter(typeof(IBuffer), "param1"); 
var expr = Expression.New(ctor, param); 
var lambda = Expression.Lambda<Func<IBuffer, T>>(expr, typeof(T).Name, new[] { param }); 
return lambda.Compile();