Я играл с дженериками и пытаюсь выяснить, как (если возможно) я могу использовать один метод для нескольких классов, передавая объект динамически.Динамический переход типа объекта к общему методу
У меня есть несколько классов, Foo и Bar согласно ниже:
[Serializable()]
public class Foo
{
private string m_Code;
private Bar m_Bar = new Bar();
public string Code
{
get { return m_Code; }
set { m_Code = value; }
}
public Bar Bar
{
get { return m_Bar; }
set { m_Bar = value; }
}
}
и
[Serializable()]
public class Bar
{
private string m_Name;
public string Name
{
get { return m_Name; }
set { m_Name = value; }
}
}
Если я заполнить мой класс с некоторыми фиктивными данными, как, например:
Foo.Code = "myFoo";
Foo.Bar.Name = "myBar";
У меня есть общий метод для возврата значения из класса:
public static object getItem<T>(T obj, string _Value)
{
try
{
object _Resolved = null;
_Resolved = obj.GetType().GetProperty(_Value).GetValue(obj, null);
return _Resolved;
}
catch (Exception ex)
{
return null;
}
}
Вызов моего метода getItem, как показано ниже, отлично работает.
string FooCode = Convert.ToString(getItem<Foo>(myFoo, "Code")) // returns "myFoo"
string BarName = Convert.ToString(getItem<Bar>(myFoo.Bar, "Name")) // returns "myBar"
Что мне любопытно, если есть общий способ адресации моего метода GetItem, определяя объект?
Например:
object myObject = Foo;
string FooCode = Convert.ToString(getItem<typeof(myObject)>(myObject, "Code")) // And this would returns "myFoo"
или:
object myObject = Bar;
string BarName = Convert.ToString(getItem<typeof(myObject)>(myObject, "Name")) // And this would returns "myBar"
вопрос имеет декларацию 'myFoo' и т.д., как' object', следовательно, тип вывода не поможет здесь .. Вопрос конкретно говорит о том случае будучи сценарии выполнения (так называемый динамическим, ОП) –