C# 表达式。常量(值,类型)类型未知。如何定义类型

C# 表达式。常量(值,类型)类型未知。如何定义类型,c#,linq,C#,Linq,所以问题是 我有下面一行wehrevalue是一个字符串 var filterValue = Expression.Constant(value, property.Type); var filterValue=Expression.Constant(值、属性、类型); 如果property.Type是一个字符串,那么一切都很好,但是该类型实际上可以是任何类型,比如十进制? 我不知道如何使所有不同类型的工作 我有这个功能 private static T Parse (string value)

所以问题是 我有下面一行wehrevalue是一个字符串

var filterValue = Expression.Constant(value, property.Type); var filterValue=Expression.Constant(值、属性、类型); 如果property.Type是一个字符串,那么一切都很好,但是该类型实际上可以是任何类型,比如十进制?

我不知道如何使所有不同类型的工作 我有这个功能

private static T Parse (string value) { return (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFromString(value); } 私有静态T解析(字符串值) { 返回(T)TypeDescriptor.GetConverter(typeof(T)).ConvertFromString(value); } 使用它,我可以做到这一点:

var newValue = Parse(value); var filterValue = Expression.Constant(newValue, property.Type); var newValue=解析(值); var filterValue=Expression.Constant(newValue,property.Type); 但是我必须事先知道类型,我试过了

var newValue = Parse(value); var newValue=解析(值); 但这不起作用


有什么想法吗?

你根本不需要知道类型:

object value = TypeDescriptor.GetConverter(property.Type).ConvertFromString(value);
var filterValue = Expression.Constant(value, property.Type);
在这种情况下,泛型方法不合适(或不需要)


您可能需要对
null
进行特殊处理,但是-或者干脆不允许它(
属性.Type
)可以是
int?
等。

您根本不需要知道类型:

object value = TypeDescriptor.GetConverter(property.Type).ConvertFromString(value);
var filterValue = Expression.Constant(value, property.Type);
在这种情况下,泛型方法不合适(或不需要)


您可能需要对
null
进行特殊处理,但是-或者干脆不允许它(
property.Type
)可以是
int?
等等。

TypeDescriptor是一个非常有用的东西,感谢您提供此信息!)TypeDescriptor是一个非常有用的东西,谢谢您提供的信息!:)