如何在 F# 中定义和实现 returns 无类型 IEnumerable 的接口方法?
How to define and implement an interface method in F# that returns an untyped IEnumerable?
在 C# 中,我有以下接口定义:
using System.Collections;
public interface ISuggestionProvider
{
#region Public Methods
IEnumerable GetSuggestions(string filter);
#endregion Public Methods
}
在 F# 中,我试过这样做:
type ISuggestionProvider =
abstract member GetSuggestions: string -> seq<'T>
type DiagnosisProvider () =
interface ISuggestionProvider with
member this.GetSuggestions s =[ "one"; "two"; "three"] |> Seq.cast
但是当它读回 C# 时,我得到:
public IEnumerable<T> GetSuggestions<T>(string value)
{
throw new NotImplementedException();
}
我需要的是它被读回为:
public System.Collections.IEnumerable GetSuggestions(string filter)
{
return _method(filter);
}
简而言之,如何 return 一个无类型的 IEnumerable 而不是 IEnumerable<'T> ???
在此先感谢您的帮助。
您需要根据 IEnumerable
而不是 seq<'T>
定义接口实现。 F# 序列是通用的,因此如果您需要非通用序列,则不能使用序列。
open System.Collections
type ISuggestionProvider =
abstract member GetSuggestions: string -> IEnumerable
type DiagnosisProvider () =
interface ISuggestionProvider with
member this.GetSuggestions s =
[ "one"; "two"; "three"]
:> IEnumerable
在 C# 中,我有以下接口定义:
using System.Collections;
public interface ISuggestionProvider
{
#region Public Methods
IEnumerable GetSuggestions(string filter);
#endregion Public Methods
}
在 F# 中,我试过这样做:
type ISuggestionProvider =
abstract member GetSuggestions: string -> seq<'T>
type DiagnosisProvider () =
interface ISuggestionProvider with
member this.GetSuggestions s =[ "one"; "two"; "three"] |> Seq.cast
但是当它读回 C# 时,我得到:
public IEnumerable<T> GetSuggestions<T>(string value)
{
throw new NotImplementedException();
}
我需要的是它被读回为:
public System.Collections.IEnumerable GetSuggestions(string filter)
{
return _method(filter);
}
简而言之,如何 return 一个无类型的 IEnumerable 而不是 IEnumerable<'T> ???
在此先感谢您的帮助。
您需要根据 IEnumerable
而不是 seq<'T>
定义接口实现。 F# 序列是通用的,因此如果您需要非通用序列,则不能使用序列。
open System.Collections
type ISuggestionProvider =
abstract member GetSuggestions: string -> IEnumerable
type DiagnosisProvider () =
interface ISuggestionProvider with
member this.GetSuggestions s =
[ "one"; "two"; "three"]
:> IEnumerable