Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换到/创建新System.RuntimeType(用于Linq到SQL对象)_C#_Linq - Fatal编程技术网

C# 转换到/创建新System.RuntimeType(用于Linq到SQL对象)

C# 转换到/创建新System.RuntimeType(用于Linq到SQL对象),c#,linq,C#,Linq,我有一个数据绑定,当勾选复选框时,设置Linq对象的属性,当取消勾选时,将其设置为null 我遇到的问题是,我正在尝试使用数据绑定,而Linq对象的属性是可为空的类型。以下是我设置对象的方法: protected override void OnParse(ConvertEventArgs cevent) { if ((Boolean)cevent.Value) { cevent.Value = DefaultValue; } el

我有一个数据绑定,当勾选复选框时,设置Linq对象的属性,当取消勾选时,将其设置为null

我遇到的问题是,我正在尝试使用数据绑定,而Linq对象的属性是可为空的类型。以下是我设置对象的方法:

    protected override void OnParse(ConvertEventArgs cevent) {
        if ((Boolean)cevent.Value) {
            cevent.Value = DefaultValue;
        } else {
            cevent.Value = null;
        }
    }
例如,我的Linq对象属性是DateTime,因此我的DefaultValue是DateTime。除非当我达到设定的点时,会出现问题

它不需要DateTime(在cevent.DesiredType中找到),它需要RuntimeType(从locals窗口):

我已尝试将System.DateTime强制转换为以下运行时类型:

    cevent.Value = Convert.ChangeType(DefaultValue, cevent.DesiredType);
但这是无效的演员阵容:

mscorlib.dll中发生类型为“System.InvalidCastException”的异常,但未在用户代码中处理

其他信息:从“System.DateTime”到“System.Nullable`1[[System.DateTime,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]]的强制转换无效

有人对解决方案有什么想法吗?谢谢

编辑:

我发现这是可行的:

    cevent.Value = (System.Nullable<System.DateTime>)DefaultValue;
cevent.Value=(System.Nullable)DefaultValue;
我只需要找到一种更普遍的方法

Edit2:

这也不起作用,因为某些原因,OnParse似乎并没有实际地过滤和更改数据源的dataMember

找出它不起作用的原因:

    Nullable<float> f = 12;

    f.GetType().Equals(cevent.DesiredType)
Nullable f=12;
f、 GetType().Equals(cevent.DesiredType)

所需类型不等于可空类型,可能在尝试更改其绑定的属性之前,会在某个位置对此进行检查。

什么是DesiredType?它声明在哪里,它有什么类型,它设置在哪里?DesiredType是绑定ConvertEventArgs的属性。它不是由我创建的,我假设它是由应用它时的默认绑定构造函数创建的。例如,如果我绑定到复选框上的“Checked”,当它到达“OnFormat”事件时,ConvertEventArgs.PreferedType是布尔值。当涉及到“OnParse”事件时,它是绑定的属性的数据类型,在本例中是Linq对象。我的问题是ConvertEventArgs.PreferedType可为Null且可为Null。显然,Convert.ChangeType无法处理Nullable。我不知道是否有任何内置的东西来做这个转换。可能您需要检测可为null的情况,并在附加的可为null的处理中将Convert.ChangeType包装到layer。我在问题中添加了一个编辑,忽略了强制转换为可为null的困难,DesiredType甚至似乎不是可为null的。它是另一种可为空的类型…:将Sf.GetType()框转换为浮点数。空值未装箱(特殊情况)。f、 GetType()==typeof(float)。cevent.DesiredType将等于typeof(float?)。DesiredType引用System.Type(RuntimeType的基类),但此类型指定了DateTime?。
    Nullable<float> f = 12;

    f.GetType().Equals(cevent.DesiredType)