如何使用 C# 将类的多属性作为方法的参数传递
本文关键字:方法 参数传递 属性 何使用 | 更新日期: 2023-09-27 18:36:36
我有一个将在其他类中继承的类。课程内容:
public T First(Expression<Func<T, string>> OrderBy = null)
{
string orderby=string.Empty;
if (OrderBy != null)
{
System.Reflection.PropertyInfo orderbyinfo= (System.Reflection.PropertyInfo) ((MemberExpression)OrderBy.Body).Member;
orderby = orderbyinfo.Name;
}
...
}
但是错误"无法将lambda表达式转换为委托类型..."使用方法:
public T First(Expression<Func<T, string>> OrderBy = null,Expression<Func<T, string>> GroupBy = null)
{
string orderby=string.Empty;
string groupby=string.empty
if (OrderBy != null)
{
System.Reflection.PropertyInfo orderbyinfo= (System.Reflection.PropertyInfo) ((MemberExpression)OrderBy.Body).Member;
orderby = orderbyinfo.Name;
}
if (GroupBy != null)
{
System.Reflection.PropertyInfo groupbyinfo= (System.Reflection.PropertyInfo) ((MemberExpression)GroupBy.Body).Member;
groupby = groupbyinfo.Name;
}
...
}
和方法如下:
Article article = new Article();
article.Title="test";
article=article.First(x=>x.Title,y=>y.Status);
请帮帮我!谢谢!!
您收到此错误是因为Status
可能不是string
并且您的Func
只能返回一个string
:
public T First(
Expression<Func<T, string>> orderBy = null,
Expression<Func<T, string>> groupBy = null)
如果您将它们设为通用,您将能够返回任何内容。由于这两个属性可以是不同的类型,因此您需要两个泛型类型(TProperty1
TProperty2
),每个泛型类型一个:
public T First<TProperty1, TProperty2>(
Expression<Func<T, TProperty1>> orderBy = null,
Expression<Func<T, TProperty2>> groupBy = null)
例:
class C<T>
{
public T First<TProperty1, TProperty2>(
Expression<Func<T, TProperty1>> orderBy = null,
Expression<Func<T, TProperty2>> groupBy = null)
{
string orderByName = string.Empty;
string groupByName = string.Empty;
if (orderBy != null)
{
System.Reflection.PropertyInfo orderByInfo = (System.Reflection.PropertyInfo)((MemberExpression)orderBy.Body).Member;
orderByName = orderByInfo.Name;
}
if (groupBy != null)
{
System.Reflection.PropertyInfo groupByInfo = (System.Reflection.PropertyInfo)((MemberExpression)groupBy.Body).Member;
groupByName = groupByInfo.Name;
}
....
}
}
用法:这里两个属性都是int
new C<string>().First(x => x.Length, x => x.Length);
但是,如果它们必须string
s,则需要将值转换/转换为 string
s:
article = article.First(x=>x.Title, y=>y.Status.ToString());
您是否已经阅读了所有错误消息并在此处发布了所有错误消息,您会注意到有一行告诉您有关转换错误的信息:
错误 1 无法将 lambda 表达式转换为委托类型"System.Func",因为块中的某些返回类型不能隐式转换为委托返回类型
错误 2 无法将类型"int"隐式转换为"字符串"