这里有一些问题:
1)首先,我在Class1中有一个属性
class Class1
{
IEnumerable itemSource;
public IEnumerable ItemSource
{
set { itemSource = value; }
get { return itemSource; }
}
}
2)一个名为TempClass
public class TempClass
{
int a;
public int A
{
set { a = value; }
get { return a; }
}
public TempClass() { }
public TempClass(int t) { A = t; }
}
3)在static void Main(string[] args)
中,我尝试了这个:
ObservableCollection<TempClass> test = new ObservableCollection<TempClass>
{
new TempClass(1),
new TempClass(2),
new TempClass(3)
}
Class1 class1 = new Class1();
class1.ItemSource = test;
foreach (var item in class1.ItemSource)
{
Console.WriteLine(item);
}
4)然后,控制台显示:
testSolution.TempClass
testSolution.TempClass
testSolution.TempClass
其中testSolution
是我的解决方案名称,因此是名称空间的名称。
我想得到的值:1,2,3。
这里,我想要的是一个属性和方法,它显示任何类型的任何集合或列表的值。
在这种情况下,ItemSource属性和方法具有:
foreach (var item in class1.ItemSource)
{
Console.WriteLine(item);
}
怎么做?
答案 0 :(得分:2)
这可能需要修改,我只是想知道如何在类型和属性未知时使用反射。 我没有测试此代码,因此可以随意修改
foreach(var objUnknown in ItemSource) {
foreach(var prop in objUnknown.GetType().GetProperties()) {
Console.WriteLine("{0}={1}", prop.Name, prop.GetValue(objUnknown, null));
}
}
答案 1 :(得分:1)
试试这个:
foreach (var item in class1.ItemSource)
{
Console.WriteLine(item.ToString());
}
第二个选项是,Overriding正如另一个答案所示,更改类定义如下:
class1.ItemSource
并打印出这样的值:
.ToString()
注意:在每个类中使用public class student
{
public int id { get; set; }
public String fName { get; set; }
public String lName { get; set; }
public override string ToString()
{
return String.Format("Student ID : {0} \n Full Name : {1} {2}", id, fName, lName);
}
}
使用重写item.ToString()
方法进行迭代时,您无需了解类或属性,并打印返回您希望在屏幕上打印的内容,让我们再看一下例如:
Student ID : 1
Full Name : suji vasuki
在这种情况下,$.getJSON(requestURL, onSuccess);
会打印$test1 = \DB::table('test1')->select('test1.first as example', 'test1.timestamp')->orderBy('timestamp', 'desc');
$test2 = \DB::table('test2')->select('test2.second as example2', 'test2.timestamp')->orderBy('timestamp', 'desc');
$test3 = \DB::table('test3')->select('test3.third as example3', 'test3.timestamp')->orderBy('timestamp', 'desc');
$testArray = $testArray->unionAll($test1)->unionAll($test2)->unionAll($test3);
$arrays = $testArray->get()->toArray();
答案 2 :(得分:1)
您需要TempClass
:
public override string ToString()
{
return A.ToString();
}
对于通用解决方案,您需要约束:
public class Class1<T> where T : Temp
{
public IEnumerable<T> ItemSource
{
get;
set;
}
public void WriteLine()
{
foreach (var item in ItemSource)
{
Console.WriteLine(item.A);
}
}
}
public abstract class Temp
{
public abstract int A { get; set; }
}
public class TempClass : Temp
{
public override int A
{
get;
set;
}
public TempClass(int t) { A = t; }
}
写下属性A:
ObservableCollection<TempClass> test = new ObservableCollection<TempClass>
{
new TempClass(1),
new TempClass(2),
new TempClass(3)
};
Class1<TempClass> class1 = new Class1<TempClass>();
class1.ItemSource = test;
class1.WriteLine();