gpt4 book ai didi

c# - 如何创建 Nullable 的实例?

转载 作者:太空狗 更新时间:2023-10-29 21:54:10 26 4
gpt4 key购买 nike

假设我们有两个类:

public class ParentEntity
{
public ChildEntity Child { get; set; }
}

public class ChildEntity
{
public byte? NullableValue { get; set; }
public byte Value { get; set; }
}

任务是用linq表达式表达如下代码:

parent.Child == null ? null : parent.Child.NullableValue

为此,我尝试使用以下代码:

public static Expression GetCondition<TParent, TChild, TChildKey>(
Expression<Func<TParent, TChild>> pe,
Expression<Func<TChild, TChildKey>> ce)
{
var test = Expression.Equal(pe.Body, Expression.Constant(null));

var ifTrue = Expression.Constant(Activator.CreateInstance<TChildKey>());
var ifFalse = Expression.Property(pe.Body,
(ce.Body as MemberExpression).Member.Name);
return Expression.Condition(test, ifTrue, ifFalse);
}

运行这段代码

Expression<Func<ParentEntity, ChildEntity>> pe = n => n.Child;    

GetCondition(pe, n => n.Value); // ok
GetCondition(pe, n => n.NullableValue); // throws an ArgumentException

抛出 ArgumentException在最后一行(在 GetCondition 中的 return 语句处),表示参数类型不匹配。

分析这段代码后我发现 Activator.CreateInstance<TChildKey>()返回 object , 但不是 TChildKey , 当 TChildKeySystem.Nullable<T> ,即 ifTrue.Typeobject ,虽然我预计它是 System.Nullable<byte> .

SO: Creating a nullable object via Activator.CreateInstance returns null 中讨论了这个问题指向 Reflection and Nullable

但这些都没有解决问题的建议。

有没有办法创建恰好 System.Nullable<T> 的实例?类型,具有值 null ?或者也许有一些其他方式来表达原始条件表达式?

最佳答案

你应该试试 Expression.New:

var ifTrue = Expression.New(typeof(Nullable<int>));

关于c# - 如何创建 Nullable<T> 的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22007478/

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