您好我访问已将参数传递给函数的通用列表的属性时出错。我的代码如下:
程序
static void Main(string[] args)
{
var stregsystem = new Stregsystem();
}
类用户
public int UserID = 10;
类Stregsystem
List<User> users = new List<User>();
public Stregsystem() {
users.Add(new User());
users.Add(new User());
users.Add(new User());
CSV.Write<User>(users);
}
类CSV
public static void Write<T>(List<T> list) {
Console.WriteLine(list.Count());
Console.WriteLine(list[0].UserID);
}
我收到以下错误:
错误1&#39; T&#39;不包含&#39; UserID&#39;的定义并且没有扩展名&gt;方法&#39; UserID&#39;接受第一个类型&#39; T&#39;可以找到(你是否>缺少using指令或汇编引用?)&gt; D:\ Development \ OOP \ CSV.cs 14 39 OOP
我认为错误在于写入功能,但我不知道问题是什么。
答案 0 :(得分:6)
Write
是一种通用方法。按原样编写,您可以使用任何类型T
调用它。你当然不能假设任何类型都有属性UserId
。这样做:
public static void Write(List<User> list)
{
Console.WriteLine(list.Count);
Console.WriteLine(list[0].UserID);
}
答案 1 :(得分:1)
由于您将方法设为通用
,因此出现此错误public static void Write(List<User> list)
{
Console.WriteLine(list.Count);
Console.WriteLine(list[0].UserID);
}
答案 2 :(得分:0)
要访问T的属性,我们需要使用Reflection,因为我们不知道有关T的详细信息(即List)
public void WriteData<T>(ref ExcelWorksheet workSheet,List<T> list)
{
workSheet.TabColor = System.Drawing.Color.Black;
workSheet.DefaultRowHeight = 12;
//Header of table
//
workSheet.Row(1).Height = 20;
workSheet.Row(1).Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
workSheet.Row(1).Style.Font.Bold = true;
...
...
...
foreach(T item in list)
{
System.Reflection.PropertyInfo[] propertyInfo = item.GetType().GetProperties();
int cellIndex = 1;
workSheet.Column(cellIndex).AutoFit();
foreach (System.Reflection.PropertyInfo info in propertyInfo)
{
object value = info.GetValue(item, null);
workSheet.Cells[recordIndex, cellIndex++].Value = value;
}
recordIndex++;
}
}