问题描述
这是一个here稍有不同的问题。 我根据需要修改了相同的代码,如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace cns01
{
class Program
{
public class ClassA<T>
{
public int IntProperty { get; set; } = 999;
}
public class ClassB<T2>
{
public ClassA<int> MyIntProperty { get; set; }
public ClassA<string> MyStringProperty { get; set; }
}
static void Main(string[] args)
{
ClassB<int> tester = new ClassB<int>();
tester.MyIntProperty = new ClassA<int>() { IntProperty = 777 };
PropertyInfo propInfo = typeof(ClassB<>).GetProperty("MyIntProperty");
dynamic property = propInfo.GetValue(tester,null); // <-- Here I get error : Late bound operations cannot be performed on fields with types for which Type.ContainsGenericParameters is true
int result = property.IntProperty; //(*1)
}
}
}
有人知道如何将值设置(和/或获取)到result(* 1)吗?
感谢您的帮助, 事先谢谢...
我的实际位置是:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace cns01
{
class Program
{
public class datafieldInfo2<T>
{
public bool IsSearchValue { get; set; } = false;
public T Value { get; set; }
}
public class SmartRowVertrag
{
public datafieldInfo2<int> ID { get; set; }
public datafieldInfo2<string> VSNR { get; set; }
}
static void Main(string[] args)
{
SmartRowVertrag tester = new SmartRowVertrag();
tester.ID = new datafieldInfo2<int>() { Value = 777,IsSearchValue = false };
tester.VSNR = new datafieldInfo2<string>() { Value = "234234234",IsSearchValue = true };
var g = RetData3(tester);
}
public static object RetData3(object fsr)
{
object retVal = new object();
var props = fsr.GetType().GetProperties();
foreach (var prop in props)
{
PropertyInfo propInfo = prop.GetType().GetProperty("IsSearchValue"); // <-- here I get null
propInfo = prop.PropertyType.GetProperty("IsSearchValue"); // here I get a propertyInfo,but...
dynamic property = propInfo.GetValue(fsr,null); // ...<-- here fires error
var result = property.IsSearchValue;
if (result == true)
{
// doThis
}
}
return retVal;
}
}
}
我该如何完成此操作而不会出现任何错误? “ prop”似乎是PropertyInfo,我不能将其用作通用datafieldInfo2。
解决方法
更改您的代码以接收以下内容的财产:
PropertyInfo propInfo = tester.GetType().GetProperty("MyIntProperty");
因此,您使用构造的泛型类型。