Exception F#4.5.0.0:错误FS0193:此表达式是函数值,即缺少参数。其类型为异常->';A.
我正在将一个类从C#改编为F#,在代码中我有一个抛出异常的方法,这个方法需要有一个泛型返回。在C#到F#中,它工作正常,但从F#到F#会发生编译错误:FS0193此表达式是函数值,即缺少参数。其类型为Exception->'aException F#4.5.0.0:错误FS0193:此表达式是函数值,即缺少参数。其类型为异常->';A.,exception,functional-programming,f#,Exception,Functional Programming,F#,我正在将一个类从C#改编为F#,在代码中我有一个抛出异常的方法,这个方法需要有一个泛型返回。在C#到F#中,它工作正常,但从F#到F#会发生编译错误:FS0193此表达式是函数值,即缺少参数。其类型为Exception->'a member this.Throw() = try raise ... with | exc -> ... Unchecke
member this.Throw() =
try
raise ...
with
| exc -> ...
Unchecked.defaultof<'T> // <- Error
成员this.Throw()=
尝试
提高。。。
具有
|exc->。。。
Unchecked.defaultof问题是您翻译了C#throw代码>就像升高一样,但这是不正确的。如果要重新引发当前异常,需要使用reraise()
函数:
member this.Throw() =
try
raise this.SourceException
with
| exc ->
let newStackTrace = _stackTrace +
ExceptionDispatchInfo.BuildStackTrace(Environment.StackTrace)
ExceptionDispatchInfo.SetStackTrace(this.SourceException, newStackTrace)
reraise()
原始代码中发生的情况是Throw()
方法不返回值,而是返回raise
函数的值,该函数引发给定的异常。这在语法上是有效的,但类型与您预期的不同。问题是您翻译了C#throw代码>就像升高一样,但这是不正确的。如果要重新引发当前异常,需要使用reraise()
函数:
member this.Throw() =
try
raise this.SourceException
with
| exc ->
let newStackTrace = _stackTrace +
ExceptionDispatchInfo.BuildStackTrace(Environment.StackTrace)
ExceptionDispatchInfo.SetStackTrace(this.SourceException, newStackTrace)
reraise()
原始代码中发生的情况是Throw()
方法不返回值,而是返回raise
函数的值,该函数引发给定的异常。这在语法上是有效的,但类型与您预期的不同。我无法重现您的问题,也无法找出您想要实现的目标。你能添加更多的信息吗,比如原始的(或最小的)C#代码?我无法重现你的问题,也无法找出你想要实现的目标。您能添加更多信息吗,例如原始(或最小)C#代码?