gpt4 book ai didi

c# - 如何在 C# 中调用具有动态属性的泛型方法

转载 作者:行者123 更新时间:2023-11-30 15:25:16 26 4
gpt4 key购买 nike

我有几个具有相似签名的方法,并试图在不使用接口(interface)的情况下将它们转换为一个通用方法。

 public List<MultiSelectDropdown> ConvertListOfJobStatusToDropdownListClickable(List<JobStatus> js) {
var list = new List<MultiSelectDropdown>();
if (js != null && js.Count >= 1) {
list = js.Select(item => new MultiSelectDropdown { Name = item.StatusValue, Value = item.id.ToString() }).ToList();
}
return list;
}


public List<MultiSelectDropdown> ConvertListOfCUsersToDropdownListClickable(List<cUser> users) {
var list = new List<MultiSelectDropdown>();
if (users != null && users.Count >= 1) {
list = users.Select(item => new MultiSelectDropdown { Name = item.User_Name, Value = item.Id.ToString() }).ToList();
}
return list;
}

这就是我想做的;传入具有两个属性的列表。

List<MultiSelectDropdown> ddlForClientUsers = ConvertToMultiSelectDropdownList(listOfClientsForUser, n => n.Client_Id, v => v.Client);

List<MultiSelectDropdown> ddlForJobStatus = ConvertToMultiSelectDropdownList(listOfJobStatus, n => n.Id, v => v.JobName);

这是我尝试过但不确定如何让 item.propName 和 item.propValue 起作用的方法。

我在下面的方法中得到“无法解析”propName 和 propValue

这可能吗?

 public List<MultiSelectDropdown> ConvertToMultiSelectDropdownList<T, TPropertyName, TPropertyValue>(List<T> listOfT, Func<T, TPropertyName> propName, Func<T, TPropertyValue> propValue) {
var list = new List<MultiSelectDropdown>();
if (listOfT != null && listOfT.Count >= 1) {
list = listOfT.Select(item => new MultiSelectDropdown { Name = item.propName, Value = item.propValue }).ToList();
}
return list;
}

public class MultiSelectDropdown {
public string Name { get; set; }
public string Value { get; set; }
public bool IsChecked { get; set; }
}

最佳答案

因为您的 MultiSelectDropdown 的属性是字符串,所以您的函数也应该返回那些。要调用这些函数,您必须将它们写成 propName(item) 而不是 item.propName - 这是属性语法,您表示您不想要使用界面。

public List<MultiSelectDropdown> ConvertToMultiSelectDropdownList<T>(List<T> listOfT, Func<T, string> propName, Func<T, string> propValue) {
var list = new List<MultiSelectDropdown>();
if (listOfT != null && listOfT.Count >= 1) {
list = listOfT.Select(item => new MultiSelectDropdown { Name = propName(item), Value = propValue(item) }).ToList();
}
return list;
}

关于c# - 如何在 C# 中调用具有动态属性的泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31475425/

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