这是我的可序列化抽象类
namespace NEN_FS {
[Serializable()]
abstract public class NFS : IEquatable<NFS> {
abstract public string Path { get; set; }
public NFS() {
Path = "";
}
public NFS(string path) {
Path = path;
}
public override bool Equals(object obj) {
NFS other = obj as NFS;
return (other != null) && ((IEquatable<NFS>)this).Equals(other);
}
bool IEquatable<NFS>.Equals(NFS other) {
return Path.Equals(other.Path);
}
public override int GetHashCode() {
return Path != null ? Path.GetHashCode() : base.GetHashCode();
}
}
}
我在F#中有什么:let file = files.[0].
并且没有路径字段。
为什么?如何访问Path属性?
答案 0 :(得分:1)
咦?奇怪......可能是元数据阅读或智能感知中的一些错误。尝试写文件。[0]。路径和编译。有时Intellisense会跳过一些东西,但编译器会看到整个结构正确并且编译时没有抱怨。
如果没有工作 - 那么F#可能不喜欢abstract
由于我不知道的某些原因(即一些整体的废话,例如实例化&#39;示例对象的可能性)。我还不熟悉F#,但考虑到.Net本身,您是否尝试过定义和使用界面而不是抽象基础?我的意思是:
namespace NEN_FS {
public interface class INFS : IEquatable<NFS>
{
string Path { get; set; }
}
[Serializable()]
abstract public class NFS : INFS {
abstract public string Path { get; set; }
public NFS() {
Path = "";
}
public NFS(string path) {
Path = path;
}
public override bool Equals(object obj) {
NFS other = obj as NFS;
return (other != null) && ((IEquatable<NFS>)this).Equals(other);
}
bool IEquatable<NFS>.Equals(NFS other) {
return Path.Equals(other.Path);
}
public override int GetHashCode() {
return Path != null ? Path.GetHashCode() : base.GetHashCode();
}
}
然后展示IEnumerable<INFS> Files
而不是IEnumerable<NFS> Files
。这样它就必须工作,因为接口是访问许多东西的核心。
答案 1 :(得分:0)
您所遇到的是与智能感知相关的错误(或者只是智能感知的基本无能力)。 F#完全能够“看到”Path
属性。只需尝试完成行let file = files.[0].Path
并编译(或在fsi中编写)。你会发现一切都很顺利。
Intellisense是一个很棒的工具,但有时它不能正常工作(我现在也可以在C#中工作)。依靠它来总是报告最新和最完整的信息会偶尔引起一些混乱。