Это немного другой вопрос, заданный здесь . Я изменил тот же код в соответствии со своими потребностями, как показано ниже:
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)
}
}
}
у кого-нибудь есть идея, как установить (и/или получить) значение в результат (* 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.