c# - 访问泛型方法中的字段
问题描述
我正在用 C# 编写我的第一个泛型类。一般来说,我正在这样做
switch (allValidatedCombo[i].Name.ToString())
{
case "senderComboBox":
senderComboBox.SelectedIndex = senderComboBox.FindString(senderComboBox.Text);
List<Provider> allProviders = senderComboBox.DataSource as List<Provider>;
var item1 = allProviders.Where(x => x.Id == (short)senderComboBox.SelectedValue).SingleOrDefault();
criteria = " SenderId ='" + item1.Id + "' and ";
break;
case "receiverComboBox":
receiverComboBox.SelectedIndex = receiverComboBox.FindString(receiverComboBox.Text);
List<Provider> allProviders1 = receiverComboBox.DataSource as List<Provider>;
var item2 = allProviders1.Where(x => x.Id == (short)receiverComboBox.SelectedValue).SingleOrDefault();
criteria = " RecipientId ='" + item2.Id + "' and ";
break;
case "signedByComboBox":
signedByComboBox.SelectedIndex = signedByComboBox.FindString(signedByComboBox.Text);
List<User> allUsers1 = receiverComboBox.DataSource as List<User>;
var item3 = allUsers1.Where(x => x.Id == (short)receiverComboBox.SelectedValue).SingleOrDefault();
criteria = " SignedById ='" + item3.Id + "' and ";
break;
case "registeredByComboBox":
registeredByComboBox.SelectedIndex = registeredByComboBox.FindString(registeredByComboBox.Text);
List<User> allUsers2 = registeredByComboBox.DataSource as List<User>;
var item4 = allUsers2.Where(x => x.Id == (short)receiverComboBox.SelectedValue).SingleOrDefault();
criteria = " CreatedById ='" + item4.Id + "' and ";
break;
}
所以我决定让它通用。我做了这个
public class HelperGeneric<T>
{
public List<T> genericProperty { get; set; }
public short genericSelectedvalue { get; set; }
public void Method<T>(T input)
{
genericProperty.Where(x => x.Id == genericSelectedvalue).SingleOrDefault();
}
}
这就是我所说的:
HelperGeneric<Provider> helper = new HelperGeneric<Provider>();
helper.genericProperty = senderComboBox.DataSource as List<Provider>;
helper.genericSelectedvalue = (short)senderComboBox.SelectedValue;
helper.Method(senderComboBox.DataSource as List<Provider>);
但是在方法的LINQ中
public void Method<T>(T input)
{
return genericProperty.Where(x => x.Id == genericSelectedvalue).SingleOrDefault();
}
我无法访问x.Id
。如何返回记录并为其设置条件
解决方案
您可以定义一个interface
with one property
:
public interface IContainId
{
int Id { get; set; }
}
然后你的泛型类和Provider
类应该实现这个接口,如下所示:
public class HelperGeneric<T> where T : class , IContainId
public class Provider : IContainId
那么以下应该可以正常工作:
genericProperty.Where(x => x.Id == genericSelectedvalue)
推荐阅读
- python - ValueError:dict 包含不在字段名中的字段 - 网络抓取
- php - 网站所有者的错误:无效的网站密钥 recaptcha google
- sql - 毫秒访问查询枢轴
- django - 在 iOS 8 上使用 AJAX 的 Django CSRF 错误
- java - 如何从给定的句子中找到给定的缩写形式的数量 - java
- c - 如何将数组值分配给C中的另一个数组?
- android - Android - Back Stack Profiler - 是否有工具或可打印属性?
- python - 转换所有日期时间列 ('
我的项目涉及采用大量 SQL 查询,通过 pandas 将它们转换为 python 中的数据帧,按用户名列过滤,然后将过滤后的数据帧输出到单独的 HTML 文件,这些文件被转换为 PDF 并发布。
我遇到了一个问题,即当日期列出现在 HTML 中时,它们是
- javascript - Html 5 Drop 事件有时不会触发(例如 10/15 次)
- php - 在内容上显示自定义帖子类型及其自定义类别