Рейтинг:
1
OriginalGriff
Да, вы можете это сделать.
Попробуйте эти методы расширения:
public static class Extensions
{
public static Type GetContainedType<T>(this List<T> ls)
{
return typeof(T);
}
public static Type GetContainedType(this Array ar)
{
return ar.GetType().GetElementType();
}
}
Затем вы можете вызвать их в своих коллекциях:
List<string> sl = new List<string>();
string[] sa = new string[10];
List<int> il = new List<int>();
int[] ia = new int[10];
Type tsl = sl.GetContainedType();
Type tsa = sa.GetContainedType();
Type til = il.GetContainedType();
Type tia = ia.GetContainedType();
po_saa
Привет! Спасибо Вам за ваш ответ!
Хотя, это не совсем то, что я имел в виду
Пожалуйста, смотрите мою версию ниже
Рейтинг:
1
po_saa
Привет!
Я предполагал что-то вроде этого:
class Program
{
static void Main(string[] args)
{
Type t = (new List<MyType>() {new MyType(), new MyType(), new MyType() }).GetType(); //this is just for pupose of getting TYPE of List<string>
//at this position we are interested in Type, not object itself
//there is no object - just "Type" or PropertyInfo
TypeInfo pi = t.GetTypeInfo();
PropertyInfo prop = pi.DeclaredProperties.Where(c => c.Name == "Item").FirstOrDefault();
Type tp = prop.PropertyType;
object obj = tp.InvokeMember("", BindingFlags.CreateInstance, null, null, null);
//now I need to cast the obj to the appropriate type to call the method Name()
}
}
class MyType
{
public string Name()
{
return "It's me";
}
}
теперь мне нужно привести obj к соответствующему типу, чтобы вызвать имя метода()
Nelek
Пожалуйста, используйте "улучшить вопрос", если вам нужно что-то добавить к этому вопросу. Размещение решений только затруднит вам помощь, потому что они не упорядочены в хронологическом порядке
Рейтинг:
0
po_saa
class Program
{
static void Main(string[] args)
{
Type t = (new List<MyType>() {new MyType("1"), new MyType("2"), new MyType("3") }).GetType(); //this is just for pupose of getting TYPE of List<string>
//at this position we are interested in Type, not object itself
//this is no object - just "Type" or PropertyInfo
TypeInfo pi = t.GetTypeInfo();
PropertyInfo prop = pi.DeclaredProperties.Where(c => c.Name == "Item").FirstOrDefault(); //no matter how much objects were built and included in List (again - there is no object - just TYPE)
Type tp = prop.PropertyType;
object obj = tp.InvokeMember("", BindingFlags.CreateInstance, null, null, new object[] { "from Invoke" });
//now we need to cast the obj to the appropriate type to call the method Name()
object name = tp.InvokeMember("Name", BindingFlags.InvokeMethod, null, obj, null);
//on my opinion there is just one way to invoke inner method without casting an object "obj" to the type "tp"
//but still it would be better to obtain an object "obj" of properly type.
}
}
class MyType
{
public MyType()
{
Console.Write("I was born => my name is: ");
}
public MyType(string s) : this()
{
Console.WriteLine(s);
}
public string Name()
{
return "It's me " ;
}
}
на мой взгляд, есть только один способ вызвать внутренний метод без приведения объекта "obj" к типу "tp"
но все же было бы лучше получить объект "obj" соответствующего типа.
Nelek
Пожалуйста, используйте "улучшить вопрос", если вам нужно что-то добавить к этому вопросу. Размещение решений только затруднит вам помощь, потому что они не упорядочены в хронологическом порядке
po_saa
Я вижу кнопку "улучшить" на своих собственных реализациях
Не могли бы вы подсказать, как ответить участникам
Спасибо
Nelek
используя "есть вопрос или комментарий" или "ответить" на другой комментарий (как я сейчас делаю с этим сообщением)
po_saa
к сожалению, он не позволяет отправить код в ответ - только простой текст
Nelek
Вот почему я сказал вам обновить свой вопрос, вы можете написать "adition после комментария XXXX", а затем свой код
Таким образом, каждый читающий ваш вопрос увидит всю соответствующую информацию сразу, без необходимости читать все ответы и комментарии.
po_saa
Итак, вы предлагаете мне нажать кнопку "улучшить" в моем (!) вопросе (вверху) вместо ответа участнику?
Nelek
Если вы хотите добавить код или информацию, имеющую отношение к вопросу, и это может помочь другим людям понять, чего вы хотите... да. Он должен перейти к вопросу
Nelek
Вы сказали OriginalGriff в комментарии: "смотрите мою версию ниже", и вы опубликовали решение.
Что было бы так трудно сказать "смотрите мое дополнение выше" и отредактировать вопрос? "EDIT: добавление после решения 1- а то, что пишут все, чего ты хочешь?
Решения придумываются для того, чтобы люди могли ответить ты- не для того, чтобы завести разговор.
po_saa
видимо, вам стоит сказать мне, как это было бы правильно применимо к данному конкретному сайту.
Я прочитал ваши предложения и постараюсь им следовать