gpt4 book ai didi

c# - 如何在C#中将属性作为参数传递?

转载 作者:行者123 更新时间:2023-12-04 10:48:56 24 4
gpt4 key购买 nike

我需要在 C# 中使用相同对象类型中的 4 个不同属性来实现排序。

假设对象 Student 有姓名、ID、生日和年级。我如何重用代码来对它们进行排序。我已设法按名称排序,如何重用代码?

private void btnSortName_Click(object sender, EventArgs e)
{
Student obj = new Student();
List<Student> listOfStudents = obj.List();
int student_count = listOfStudents.Count();
int first_index, last_index;

for (first_index = 1; first_index < student_count; first_index++)
{
last_index = first_index - 1;
Student first = listOfStudents[first_index];
Student last = listOfStudents[last_index];

while (last_index >= 0 && DateTime.Compare(last.RDate, first.RDate) > 0)
{
listOfStudents[last_index + 1] = listOfStudents[last_index];
last_index = last_index - 1;
}
listOfStudents[last_index + 1] = first;
}
DataTable dt = Utility.ConvertToDataTable(listOfStudents);
dataGridStudents.DataSource = dt;
btnSortName.Visible = false;
btnSortName.Enabled = false;
btnSortNameD.Visible = true;
btnSortNameD.Enabled = true;
}

我尝试通过创建一个插入排序方法并将属性作为参数传递并返回该对象的列表来执行此操作,但是这两个都显示错误:
public List<Student> insertion_Sort(ref String data, Boolean asc)
{
Student obj = new Student();
List<Student> listOfStudents = obj.List();
int student_count = listOfStudents.Count();
int first_index, last_index;

for (first_index = 1; first_index < student_count; first_index++)
{
last_index = first_index - 1;
Student first = listOfStudents[first_index];
Student last = listOfStudents[last_index];

if (asc){
while (last_index >= 0 && DateTime.Compare(last.data, first.data) > 0)
{
listOfStudents[last_index + 1] = listOfStudents[last_index];
last_index = last_index - 1;
}
listOfStudents[last_index + 1] = first;
}
else
{
while (last_index >= 0 && DateTime.Compare(last.data, first.data) < 0)
{
listOfStudents[last_index + 1] = listOfStudents[last_index];
last_index = last_index - 1;
}
listOfStudents[last_index + 1] = first;
}
}
return listOfStudents;
}

returntype

attribute as parameter

我如何解决这些问题?

最佳答案

你的第二个错误是因为你不能做 obj.attribute 而属性是一个带有属性名称的字符串。使用类似 obj.GetType().GetProperty(propertyName).GetValue(obj, null) 的东西按名称获取属性..

也许这会奏效,试试吧,因为我目前没有你的学生数据或 c# 编译器来检查......评论它的输出。

public List<Student> insertion_Sort(List<Student> listOfStudents,ref String propertyName, Boolean asc)
{
Student obj = listOfStudents [0];
int student_count = listOfStudents.Count();
int first_index, last_index;
dynamic prop= obj.GetType().GetProperty(propertyName);
for (first_index = 1; first_index < student_count; first_index++)
{
last_index = first_index - 1;
Student first = listOfStudents[first_index];
Student last = listOfStudents[last_index];

if (asc){
while (last_index >= 0 && prop.GetValue(first, null)-prop.GetValue(last, null) > 0)
{
listOfStudents[last_index + 1] = listOfStudents[last_index];
last_index = last_index - 1;
}
listOfStudents[last_index + 1] = first;
}
else
{
while (last_index >= 0 && prop.GetValue(first, null)-prop.GetValue(last, null) <0)
{
listOfStudents[last_index + 1] = listOfStudents[last_index];
last_index = last_index - 1;
}
listOfStudents[last_index + 1] = first;
}
}
return listOfStudents;
}

关于c# - 如何在C#中将属性作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59573155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com